摘要: what: AQS的全称是AbstractQueuedSynchronizer,即抽象队列同步器,其底层是volatile与CAS。而其上层则是基于该抽象类构建的许多并发组件,如ReentrantLock、Semaphore等。 AQS最核心的数据结构是一个volatile int state 和 阅读全文
posted @ 2022-06-01 18:09 修心而结网 阅读(37) 评论(0) 推荐(0) 编辑
摘要: what: CAS的全称是Compare and Swap,即比较并交换。比较的是当前内存中存储的值与预期原值,交换的是新值与内存中的值。这个操作是硬件层面的指令,因此能够保证原子性。Java通过JNI(本地方法调用)来使用这个原子操作,也是乐观锁最常用的机制。 CAS操作包含三个操作数——内存位置 阅读全文
posted @ 2022-06-01 18:08 修心而结网 阅读(408) 评论(0) 推荐(0) 编辑
摘要: what: hashmap扩容 1、重新建立一个新的数组,长度为原数组的两倍(实际长度为2的n次幂); 2、遍历旧数组的每个数据,重新计算每个元素在新数组中的存储位置(一次性完成);使用节点的hash值与旧数组长度进行位与运算,如果运算结果为0,表示元素在新数组中的位置不变;否则,则在新数组中的位置 阅读全文
posted @ 2022-06-01 16:22 修心而结网 阅读(575) 评论(0) 推荐(0) 编辑
摘要: why: 在 JDK7 及之前的版本,HashMap 的数据结构可以看成“数组+链表”; 在 JDK8 及之后的版本,数据结构可以看成"数组+链表+红黑树"; how: JDK8中,桶的链表长到一定长度后,会尝试变树。具体代码如下: static final int TREEIFY_THRESHOL 阅读全文
posted @ 2022-06-01 15:51 修心而结网 阅读(89) 评论(0) 推荐(0) 编辑
摘要: what: java中map的大体的结构如下: hashmap: a、HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的;它采用 key-value 键值对的形式存放元素(并封装成 Node 对象),允许使用 null 键和 null 值,但只允许存在一个键为 nu 阅读全文
posted @ 2022-06-01 15:31 修心而结网 阅读(179) 评论(0) 推荐(0) 编辑
摘要: what: fail-fast:在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。 fail-safe:在迭代器遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合 阅读全文
posted @ 2022-06-01 10:44 修心而结网 阅读(53) 评论(0) 推荐(0) 编辑