currentHashMap1.8扩容原理
时间: 2023-07-07 15:03:23 浏览: 152
Jdk1.8中的HashMap实现原理.pdf
ConcurrentHashMap 1.8 的扩容是基于 JDK 1.7 的实现进行优化的。
在 JDK 1.7 中,ConcurrentHashMap 的扩容是通过分段锁来实现的。具体来说,ConcurrentHashMap 会将其内部数据结构(Segment 数组)分成若干个段(Segment),每个段都有一个独立的锁。在扩容时,只需要对需要扩容的段加锁,其他段仍然可以正常读写,从而实现了并发扩容。
而在 JDK 1.8 中,ConcurrentHashMap 改为了使用 CAS 原子操作来实现扩容。它会先将整个 ConcurrentHashMap 分成若干个桶(table),每个桶中存储多个键值对。当需要扩容时,先创建一个新的桶数组,并将每个桶中的键值对重新计算 Hash 后,放入新的桶数组中。在放入新桶数组的过程中,通过 CAS 操作来保证线程安全。扩容完成后,新的桶数组会替换旧的桶数组,从而完成整个扩容过程。
需要注意的是,在扩容时,ConcurrentHashMap 会将每个桶中的键值对分拆成两个链表,分别放入新旧两个桶数组中。这是为了防止在扩容过程中,某个桶中的所有键值对都需要重新计算 Hash 的情况,从而导致大量的链表重建,影响扩容效率。
阅读全文