ConcurrentHashMap是JUC中最重要的并发容器之一,它在JDK1.7和1.8中进行了彻底的重构。这两个版本的差异,本质上是从‘分段锁’的粗粒度并发控制,进化到‘CAS + synchronized’的细粒度并发控制,这背后反映了硬件发展与对并发性能诉求的变化。”
第一部分:JDK 1.7 - 分段锁时代
核心思想:锁分离
JDK1.7的ConcurrentHashMap不再像Hashtable那样使用一把大锁锁住整个数组,而是采用了一种更精巧的分段锁机制。
-
数据结构:Segment + HashEntry
-
它内部由一个
Segment数组组成,每个Segment本质上是一个小的哈希表,它继承自ReentrantLock,自带一把锁。 -
每个
Segment内部又由一个HashEntry数组组成,这才是真正存储键值对的地方。 -
可以理解为,整个ConcurrentHashMap是一个二级哈希结构:第一级是
Segment数组,第二级是HashEntry数组。
text
ConcurrentHashMap ├── Segment[0] (继承ReentrantLock,是一把锁) │ └── HashEntry[] (存储K-V的链表数组) ├── Segment[1] (另一把锁) │ └── HashEntry[] └── ... -
-
如何保证线程安全?

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



