浅谈ConcurrentHashMap
ConcurrentHashMap
首先它是一个线程安全的,它的底层实现是链表+数组+红黑树。
在jdk1.8之前它实现线程安全的方式是:数组+Segment+分段锁实现,其内部分为一个个段数组。Segment通过继承ReentrantLock来进行加锁,通过锁住一个Segment来保证每个Segment内操作的线程安全性,从而实现了全局安全。然后这样做有个缺陷,每次通过hash确认位置时需要两次才能定位当前key落在哪个槽
第一次确认当前key落在哪个Segment数组;第二次确认当前key的具体位置
在jdk1.8之后,它取消了分段锁的设计,使用了CAS+synchronized来实现线程安全的;
想了解更多请参考博客
https://blog.csdn.net/weixin_46574815/article/details/123636105
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.