ConcurrentHashMap详解
ConcurrentHashMap详解
概述
ConcurrentHashMap是线程安全的HashMap,通过分段锁实现高效的并发访问。
HashMap vs ConcurrentHashMap
- HashMap:非线程安全,性能高
- ConcurrentHashMap:线程安全,通过分段锁/Node级锁实现
JDK1.7 - 分段锁设计
- 结构:Segment数组 + HashEntry链表
- 默认16个Segment,多线程可同时访问不同Segment
- 优点:并发度高
- 缺点:获取size()需遍历所有Segment
JDK1.8+ - CAS+Synchronized
- 结构:Node数组 + 红黑树 + CAS
- 只对单个Node加锁,粒度更细
- CAS无锁操作性能更高
- 支持红黑树优化查询性能
put方法逻辑
计算hash值 → 定位Node → Node为空CAS插入 → Node存在synchronized加锁 → 链表/树操作
常见问题
Q: ConcurrentHashMap是否完全线程安全?
A: 单个操作线程安全,但复合操作需要外部同步
Q: 为什么使用volatile?
A: 保证可见性,让其他线程立即看到修改
Q: JDK1.7和1.8的区别?
A: 1.7用Segment分段锁,1.8用Node级锁配合CAS,粒度更细性能更高
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 kaii的博客!
