外观
一句话答案
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)避免争抢。