后端面试必会之ConcurrentHashMap的实现原理和使用

为什么要使用ConcurrentHashMap?

没有对比就没有伤害,在并发编程中使用HashMap可能会导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,才有了ConcurrentHashMap。

为什么说HashMap可能会导致死循环?

因为HashMap在并发执行put操作时,会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不会为空,就会产生死循环获取Entry,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。

为什么说HashTable效率低下?

HashTable使用synchronized来保证线程安全。当一个线程访问HashTable的同步方法,其他线程也访问HashTable的同步方法就会进入阻塞或轮训状态。这个的同步方法包括读和写,可以理解HashTable只有 一把锁,所有的线程不管做什么,都是竞争这一把锁,例如线程1使用put进行元素添加,线程2不但不能使用put来添加元素,也不能使用get方法来获取元素。

为什么ConcurrentHashMap效率高,线程安全?

因为ConcurrentHashMap使用锁分段技术来有效的提升并发的访问率

猜你喜欢

转载自blog.csdn.net/u010372981/article/details/80891081
今日推荐