一、为什么要用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把这个容器分为若干段,每段分配一把锁。当一个线程访问其中一个段的数据的时候,其它段的数据也能被其它线程访问到。
来源:CSDN
作者:mjx715813
链接:https://blog.csdn.net/mjx715813/article/details/103985696