ConcurrentHashMap 是 Java 并发编程中使用频率最高的并发容器之一。从 JDK 7 的分段锁到 JDK 8 的 CAS + synchronized,其实现经历了重大演进。本文将深入剖析 JDK 8 中 ConcurrentHashMap 的核心实现,包括 put、get、扩容、size 等关键流程的源码级分析。
一、JDK 7 vs JDK 8 架构对比
1.1 JDK 7:分段锁(Segment)
┌─────────────────────────────────────────────────────────┐
│ JDK 7 ConcurrentHashMap 架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Segment0 │ │ Segment1 │ ... │ Segment15│ │
│ │ (锁) │ │ (锁) │ │ (锁) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Entry[] │ │Entry[] │ │Entry[] │ │
│ │ table │ │ table │ │ table │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ 默认16个Segment,每个Segment独立加锁 │
│ 并发度 = Segment数量(默认16) │
│ 锁粒度:Segment级别 │
│ │
└─────────────────────────────────────────────────────────┘
2026/7/3大约 16 分钟