CS-Notes 学习笔记
Java 后端 · Java 容器

ConcurrentHashMap 怎样保证线程安全?JDK 1.7 和 1.8 有什么区别?

先自己想一想,再看参考要点

参考要点

  • JDK 1.7 用分段锁,Segment 继承 ReentrantLock,默认 16 个,最多 16 个线程同时写,并发度创建后不能改
  • JDK 1.8 去掉 Segment,用 Node 数组加链表或红黑树,空桶用 CAS 插入,非空桶用 synchronized 锁住头节点,锁粒度缩小到桶
  • get 不加锁,靠 volatile 读到最新值
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。