为什么要使用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使用锁分段技术来有效的提升并发的访问率