刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
分析问题:原理与实现主要是锁的原理与实现!我们可以从JDK1.7开始聊起:
JDK1.7版本, ConcurrentHashMap内部使用段(Segment), ConcurrentLevel 有16个分段,这16个分段有独立的锁机制,每个独立的机制都是一张表,表的下面是链表,这样就可以支持并发的同时保证每张表的线程安全,大大的题高了效率。
JDK1.8版本, ConcurrentHashMap内部使用sychronized + volatile + CAS
的实现降低锁的粒度,大家可以认为粒度就是HashEntry(首节点)。
让我们看看具体是如何实现的:

ConcurrentHashMap 是设计为非阻塞的。在更新时会局部锁住某部分数据,但不会把整个表都锁住。同步读取操作则是完全非阻塞的。好处是在保证合理的同步前提下,效率很高。坏处是严格来说读取操作不能保证反映最近的更新。例如线程A调用putAll写入大量数据,期间线程B调用get,则只能get到目前为止已经顺利插入的部分数据。
让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!
