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,粒度更细性能更高