
- 底层数据结构:JDK7 底层数据结构是使用 Segment 组织的数组 + 链表,JDK8 中取而代之的是数组+链表+红黑树的结构,在链表节点数据大于8 (且数据总量大于等于 64 )时,会将链表转化为红黑树进行存储。
- 查询时间复杂度:从 JDK7 的遍历链表 O(n),JDK8 变成遍历红黑树 O(logN)。
- 保证线程安全机制:JDK7 采用 Segment 的分段锁机制实现线程安全,其中 Segment 继承自 ReentrantLock 。JDK8 采用 CAS + synchronized 保证线程安全
- 锁的粒度:JDK7 是对需要进行数据操作的 Segment 加锁,JDK8 调整为对每个数组元素的头节点加锁。
ConcurrentHashMap 在 JDK7 中的实现原理
为什么取消分段锁机制
ConcurrentHashMap 在 JDK8 中的实现原理