java
文章平均质量分 89
Tʀᴜsᴛ³⁴⁵
纸上得来终觉浅,绝知此事要躬行
展开
-
深入理解CAS 乐观锁 | Java
概要之前被人问到 CAS ,只知道是乐观锁,具体为什么被称为乐观锁,已经在何时使用到了它却是没有过了解,然后就简单的学习了一下,以此记录CAS(乐观锁)Synchornized 是悲观锁,线程一旦得到锁,其他的线程就只能挂起了cas 的操作则是乐观锁,他认为自己一定会拿到锁,所以他会一直尝试,知道成功拿到为止;CAS 机制CAS 英文名是 Compare And Swap 缩写,翻译过来就是比较和替换。CAS 机制中使用了三个操作数,内存地址,旧的预期的值,要修改的值;在修改一个值A的时原创 2021-06-03 15:08:34 · 191 阅读 · 0 评论 -
Java 多线程学习
进程独立性:进程是系统中独立存在的实体,他可以拥有自己独立的资源,每一个进程都拥有自己的私有地址空间。在没有经过进程本身允许的情况下,一个用户进行不能直接访问其他进程的地址空间。动态性:进程与程序的区别在于,程序是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。在程序中加入了时间的概念。进程具有自己的生命周期和各种不同的在黄台,这些概念在程序中都是不具备的。并发性:多个程序可以在...原创 2019-04-13 19:07:08 · 115 阅读 · 0 评论 -
Java注解的使用
java 提供了一种源程序中的元素关联 任何信息和任何元数据的途径 和方法。Java 中常见的注解JDK自带的注解@Override用来指定方法的重载,他可以强制一个子类必须覆盖父类的方法。public class Per { String name; public String getName() { return name; }}c...原创 2019-04-13 19:04:34 · 116 阅读 · 0 评论 -
类的加载、连接和初始化
当使用java命令运行某个程序时,该命令会启动一个java虚拟机,不管这个程序有多么复杂,有多少个线程,这个程序都会处于该虚拟机的进程里。同一个jvm的所有线程,所有变量都处于同一个进程里。他们都使用该JVM进程的内存区。当系统出现以下问题时,JVM会被终止:程序正常结束程序运行到使用System.exit()或Runntime.getRuntime().exit()代码处结束程序。程序执...原创 2019-04-13 19:02:52 · 169 阅读 · 0 评论 -
java 序列化机制和自定义序列化
序列化是将对象保存在磁盘中,或允许在网络中直接传输对象。对象序列化机制允许把内存中的java对象转成与平台无关的二进制流,从而将这种二进制文件持久的保存在磁盘上。其他程序一旦获得了这种二进制的流。就可以将这个二进制流恢复成原来的java对象对象的序列化:指将一个java对象写入到IO流中,与此对应的是,对象的反序列化则是从IO流中恢复该对象.如果要将某个对象保存到磁盘上或者通过网络传输,那么...原创 2019-04-08 17:02:24 · 1820 阅读 · 0 评论 -
java Nio(一) : Nio 和Io 的区别
目录:java Nio(一) : Nio 和Io 的区别java Nio(二): Buffer(缓冲区)的数据存取java Nio(三):直接缓冲区 和 非直接缓冲区java Nio(四) :通道(Channel)java Nio(五) : 字符集:CharSetjava NIO 是Java1.4版本开始引入的一个新的io API ,可以替代表标准的Java IO API,NIO 和原...原创 2019-04-10 11:26:50 · 520 阅读 · 0 评论 -
java Nio(二): Buffer(缓冲区)的数据存取
从结构来看 Buffer就想 一个数组。可以保存多种类型的数据。他是一个抽象类。常用的子类是ByteBuffer,除了ByteBuffer 外,也可以操作其他基本类型,但是Boolean 除外。/** * 1,缓冲区(Buffer):在java NIO 中负责数据的存储。缓冲区就是数组。用于存储个中不同类型的数据。 * 根据数据类型的不同(boolean 除外) ,提供了对应的缓冲...原创 2019-04-10 11:11:42 · 505 阅读 · 0 评论 -
Java Nio (三):直接缓冲区 和 非直接缓冲区
/** 4,直接缓冲区与非直接缓冲区: * 非直接缓冲区 : 通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存中。 * 直接缓冲区 : 通过allocateDirect()方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率。 *///创建直接缓冲区ByteBuffer buf = ByteBuffer.allocateDirect(1024...原创 2019-04-10 10:56:30 · 1148 阅读 · 0 评论 -
java Nio (四) :通道(Channel)
Channel 可以将指定的文件 或者 部分 全部映射成 Buffer程序不能直接访问 Channel中的数据 ,读和写 都不行,Channel只能和Buffer 进行交互。/** * 1,通道(Channel):由java.nio.channels包定义的。Channel表示 IO 元与目标打开的连接。 * Channel本身不能直接访问数据,Channel只...原创 2019-04-10 10:50:07 · 479 阅读 · 0 评论 -
java Nio (五)字符集:CharSet
字符集:java默认使用 Unicode 字符集,但是很多操作系统并不会使用 Unicode 字符集,那么当从系统中读取数据到java程序时,就会出现乱码等问题。JDK 1.4 提供了CharSet 来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器 和 编码器 的方法,还提供了获取 CharSet 所支持的字符集的方法,CharSet 是不可变的。/** * 字符集:Cha...原创 2019-04-10 10:33:17 · 780 阅读 · 0 评论 -
HashMap 的原理
一直使用HashMap,但是 你知道他的实现原理吗?HashMap的存储结构:首先 看一张图:hashmap 的存储结构其实就是 数组加链表的形式来存放数据,这个数组的类型就是Entry。map里面的所有内容都保存在Entry里面。每个数组的元素其实就是一个链表,当哈希值重复的时候,就会将数据存到链表中。形象一点说就是 有好多个桶(数组的元素),当你需要存放一个键值对的时候,就会通过键...原创 2019-02-13 16:54:08 · 839 阅读 · 0 评论 -
Java Object类 和方法
public class ObjectObject 位于java.long 包中,java.long包是java最核心的类,在编译时会自动导入Object是 所有类的祖先 每个类都使用Object类作为超类,所有对象(包括数组)都实现了这个类的方法。- clone():克隆的意思。必须实现Cloneable接口才可以调用这个方法,主要用途是用来 保存另一个当前存在的对象。- equa...原创 2019-02-13 13:23:12 · 111 阅读 · 0 评论 -
从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节
最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的,所以决定把它们研究一下。以前写程序一直没有注意hashCode的作用,一般都是覆盖了equals,缺没有覆盖hashCode,现在发现这是埋下了很多潜在的Bug!今天就来说一说hashCode和equals的作用。 先来试想一个场景,如果你想查找一个集合中是否包...转载 2019-02-13 12:43:07 · 329 阅读 · 0 评论 -
线程同步的方法:Synchronized、Lock、ReentrantLock分析
Synchronized:Synchronized修饰的代码块或者方法被某个线程获取到之后,其他线程就会被阻塞。当被修饰的方法执行完后则自动释放锁Lock:Lock是一个接口,lock提供比Synchronized更广泛的锁操作,他们允许更灵活的结构化可能具有完全不同的属性 ,并且可以支持多个相关联的对象Condition 。下面列出Lock的常用方法:void lock():获得...原创 2019-02-17 14:43:53 · 616 阅读 · 0 评论 -
方法锁、对象锁、类锁的意义和区别
synchronized 是用来处理多个线程访问同一个代码块或者是方法,或者是一个类。方法锁:每个类的对象对应一个锁,当对象中的某个方法被synchronized修饰后,调用该方法的时候必须获得该对象的“锁”。该方法一旦执行就会占有该锁,别的线程使用该对象调用这个方法的时候就会被阻塞直到这个方法执行完后释放锁,被阻塞的线程才能获得锁,从而进入执行状态。这种机制确保了在同一时刻,对于每一...原创 2019-02-17 14:40:51 · 4702 阅读 · 1 评论 -
深入理解Java并发之synchronized实现原理
线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据...转载 2019-02-16 12:08:32 · 118 阅读 · 0 评论 -
Java 代理模式
代理模式 是Java 的一种设计模式,主要就是在访问目标对象的时候通过一个代理类 来访问目标对象。那这样做有什么好处吗?使用代理模式 可以在通过代理类访问目标对象的基础上增加一些额外的功能。比如说目标对象只有一个保存数据的方法,我现在要保存一些数据,但是我想在保存数据的时候删除原来的数据。这样我就必须修改目标对象中的方法。但是有了代理以后我可以让代理类去完成这件事,目标对象只保存数据,其他的都让...原创 2019-02-15 16:41:59 · 100 阅读 · 0 评论 -
Java 反射机制
什么是反射:对于任何一个类,我们都能知道他有哪些方法。对于任何一个对象我们都可以调用他的任意一个方法和属性,这种动态的获取信息以及动态的调用对象的方法就称为java的反射机制。形象一点说,任何一个类或者对象,对我们来说都是透明的,想要啥直接拿就可以。首先列出我们要反射的类:public class Person { int age; String name; private St...原创 2019-02-15 10:39:20 · 145 阅读 · 0 评论 -
Java 并发集合CopyOnWriteArrayList和CopyOnWriteArraySet
java 的并发集合有哪些,和同步集合有哪些区别:ConcurrentHashMapCopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMap和HashTable的区别他们都可以在多线程下执行,但是当HashTable的内容变多时他的性能就会降低,因为迭代它必须锁定更多的时间。而ConcurrentHashMap是专用于高并...原创 2019-02-14 16:28:46 · 171 阅读 · 0 评论