面试官再问currentHashMap,就将这篇文章甩给他
点击上方 “ Java专栏 ”, 选择“置顶或者星标” 第一时间阅读精彩文章! 1、☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 2、☞ 《Java面试手册》.PDF 点击查看 currentHashMap的介绍 ConcurrentHashMap 是线程安全并且高效的一种容器,我们就需要研究一下 ConcurrentHashMap 为什么既能够保证线程安全,又可以保证高效的操作。 为什么使用 ConcurrentHashMap ,我们就需要和 HashMap 以及 HashTable 进行比较? HashMap 是线程不安全的,在多线程的情况下, HashMap 的操作会引起死循环,导致 CPU 的占有量达到100%,所以在并发的情况下,我们不会使用 HashMap 。 死锁原因 在 HashMap 扩容的时候会调用 resize() 方法,就是这里的并发操作容易在一个桶上形成环形链表;这样当获取一个不存在的 key 时,计算出的 index 正好是环形链表的下标就会出现死循环。 HashTable 其中使用synchronize来保证线程安全,即当有一个线程拥有锁的时候,其他的线程都会进入阻塞或者轮询状态,这样会使得效率越来越低。 而 ConcurrentHashMapMap 的锁分段技术可以有效的提高并发访问率 HashTable 访问效率低下的原因