Skip to content
极高困难

一句话答案

JDK8用CAS+synchronized锁单个Node实现并发安全,数组+链表+红黑树结构。

核心要点

JDK7: Segment分段锁(16个Segment,每段一把ReentrantLock)

JDK8: CAS+synchronized

  • put:CAS写空桶 / synchronized锁链表头节点
  • 扩容:多线程协助迁移(transferIndex分段)
  • size:baseCount + CounterCell数组(类似LongAdder)

并发度: JDK7最多16 / JDK8理论等于数组长度

追问与易错

追问方向:

  • 这个概念在你的项目中是怎么应用的?
  • 和相关技术/方案相比有什么优劣?
  • 如果出了问题你会怎么排查?

易错点:

  • ❌ 只知道概念不知道原理——面试官会追问底层实现
  • ❌ 缺乏实际使用经验——结合项目场景回答更有说服力

💡 记忆锚点

JDK7 像把仓库分成 16 个房间各配一把锁(Segment 分段锁),JDK8 升级为每个货架一把锁(synchronized 锁单个 Node)——锁粒度从房间级缩小到货架级,并发度从固定 16 变成数组有多长就能多高。空桶用 CAS 无锁写入,计数用分散记账(CounterCell)避免争抢。