java.util.Set框架: SetSet对Map进行了包裹,利用Map中key的唯一性保证集合中元素的唯一性,所有的key指向同一个对象。 HashSet直接用的HashMap,元素的顺序是不确定的,查找删除等操作的时间复杂度为O(1)。 // 所有key指向这个对象// Dummy valu ...
Java容器框架源码阅读笔记(二)Queue、Stack
java.util.Queue和java.util.Stack框架: Queuepublic interface Queue<E> extends Collection<E> 介绍 Queue是一个队列接口,继承自Collection。定义了关于FIFO队列的相关操作。 ...
Java容器框架源码阅读笔记(一)List
java.uti.List框架: ArrayListpublic class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java ...
Java容器框架源码阅读笔记(零)Collection、Map
Java容器中共有两个接口,分别是Collection和Map。Collection用于存放多个 “单个对象” ,而Map用于存放多个 “两个对象(键值对)” 。 Collectionjava.uti.Collection框架: 介绍Collection是存放单个对象的容器。 Collec ...
synchronized底层实现
预备知识 Java对象(非数组):用来存储锁,由对象头、实例数据、对齐填充数据组成。 对象头:由MarkWord、类型指针组成。32位JVM下的Markword占32位,存储的数据取决于锁的状态。 初始是无锁状态。 在运行期间MarkWord里存储的数据会随着锁状态的变化而变化 ...
ThreadLocal应用及原理
ThreadLocal是一个用于创建线程局部变量的类。当前线程通过ThreadLocal的set()方法设置的变量只对当前线程可见,通过get()获取设置的变量。 使用 支持泛型 ThreadLocal<String> threadLocal = new ThreadLocal<& ...
volatile底层实现
预备知识 可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。 重排序:如果在单线程下对于指令的重排不会影响逻辑,那么在可以提高运行效率的前提下会进行适当的指令重排。 缓存行:CPU中的缓存是分段的,一段对应一个存储空间,称为缓存行,缓存行是CPU缓存中可分配的最小存储单元。 CP ...