concurrentHashMap低层原理
时间: 2023-10-27 15:53:57 浏览: 105
ConcurrentHashMap 是 JDK 提供的线程安全的哈希表实现,相比于 Hashtable 和 synchronizedMap,它在高并发场景下的性能更好。
ConcurrentHashMap 的实现基于分段锁技术,内部维护了一个 Segment 数组,每个 Segment 充当一个小的哈希表,它们共同组成了 ConcurrentHashMap 的整个数据结构。在默认情况下,ConcurrentHashMap 会创建 16 个 Segment,每个 Segment 可以独立加锁,不同的线程可以同时访问不同的 Segment,从而提高了并发度。
每个 Segment 中的元素是根据哈希值存储在一个 HashEntry 数组中的。HashEntry 是 ConcurrentHashMap 中的一个内部类,它包含了键值对的信息,同时还包含了一个指向下一个元素的指针,这构成了一个链表。当多个线程同时访问一个 Segment 中的链表时,ConcurrentHashMap 会使用 CAS 操作对链表进行加锁,从而保证线程安全。
ConcurrentHashMap 在进行扩容时,会将原数组中的每个 Segment 扩容成一个更大的 Segment,并将其中的元素重新分配到新的 Segment 中。在扩容过程中,ConcurrentHashMap 仍然可以保证多个线程同时读写的线程安全性。
总之,ConcurrentHashMap 的核心思想是将一个大的哈希表分割成多个小的哈希表,并对每个小的哈希表进行加锁,以此来保证线程安全和高并发性能。
阅读全文