ConcurrentHashMap

只谈情不闲聊 提交于 2020-01-15 15:21:13

一、为什么要用ConcurrentHashMap

经典讲解为什么并发不用HashMap:https://blog.csdn.net/mydreamongo/article/details/8960667

你需要拥有的前置知识–HashMap源码解析:https://blog.csdn.net/yanluandai1985/article/details/79387533

HsahMap在并发执行put操作时会引起死循环,是因为多个线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会死循环获取Entry。

Hashtable容器使用的是synchronized来保证线程安全,但是Hashtable性能低下。原因是当一个线程访问Hashtable的同步方法的时候,另外的线程只能进入阻塞状态,等待那个拥有同步锁的线程释放同步锁。所以线程竞争同步锁越激烈,Hashtable的性能越低下。综上,Hashtable性能低下的原因是所有线程竞争同一把锁。

ConccurentHashMap为了改善多个线程竞争同一把锁导致的性能低下的缺点,ConccurentHashMap采用的是锁分段技术。锁分段技术的原理是:当操作互不影响,锁就可以分离。ConcurrentHashMap把这个容器分为若干段,每段分配一把锁。当一个线程访问其中一个段的数据的时候,其它段的数据也能被其它线程访问到。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!