ConcurrentHashMap 怎样保证线程安全?JDK 1.7 和 1.8 有什么区别?
先自己想一想,再看参考要点
参考要点
- JDK 1.7 用分段锁,Segment 继承 ReentrantLock,默认 16 个,最多 16 个线程同时写,并发度创建后不能改
- JDK 1.8 去掉 Segment,用 Node 数组加链表或红黑树,空桶用 CAS 插入,非空桶用 synchronized 锁住头节点,锁粒度缩小到桶
- get 不加锁,靠 volatile 读到最新值
参考要点
学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。