HashMap 在并发执行put操作时会引起死循环,因为多线程导致 HashMap 的 Entry 链表形成环形数据结构,则 Entry 的 next 节点永远不为空,会死循环获取 Entry。 HashTable 使用 synchronized 来保证线程安全,但是在线程竞争激烈的情况下,效率非常低。其原因是所有访问该容器的线程都必须竞争一把锁。 ConcurrentHashMap 使用锁分段技术,容器里有多把锁,每一把锁用于其中一部分数据,当多线程访问不同数据段的数据时,线程间就不会存在锁的竞争。数组+链表+红黑树的存储结构。
转载于:https://juejin.im/post/5c2c2f00e51d457457292d60