ConcurrentHashMap解析(JDK1.8)
为什么要用ConcurrentHashMap?
- HashMap在多线程下会陷入死循环
- HashTable在HashMap的方法上添加了synchronized,虽然不会死锁,但当线程竞争激烈的情况下,效率会下降的很快,在查询时,线程数量过大,而锁却只有一个,导致大量的线程陷入阻塞,严重影响效率
正是以上原因所以有了ConcurrentHashMap。
ConcurrentHashMap为什么能解决上述问题?
- HashMap和HashTable的数据结构是 数组加链表和红黑树(链表数目过大时,链表转化为红黑树)。
- ConcurrentHashMap1.8之前用到的是分段锁(Segment),而1.8启用了一种全新的方式实现,利用CAS算法,底层任然是数组+链表+红黑树 为了达到并发,增加了辅助类,如TreeBin,Traverser等内部类。