一. 简介
- CurrentHashMap是线程安全的、采用
数组+链表
实现的Key-Value结构。
二. 原理
-
为什么要将CurrentHashMap线程安全?
在并发情况下,虽然可以使用Collections.synchronizedMap()
创建线程安全的map集合;或者使用线程安全的Hashtable
,但是二者效率太低,故有了效率和性能更高的CurrentHashMap。 -
实现
JDK1.7版本:数组+链表
(1)Segment数组的每个单元维护了一个HashEntry(类似HashMap);
(2)对Segment数组的每个单元分别加锁(即采用了分段锁);
(3)每个HashEntry都采用volatile修饰Value和下一个节点next。JDK1.8的优化:
(1)放弃了原来的分段锁,采用CAS+Synchronized;
(2)将HashEntry改成Node,依旧用volatile修饰值和next;
(3)在链表大于8时候会转换红黑树。