首页 > 编程笔记 > Java笔记 阅读:17

ConcurrentHashMap底层存储结构是什么(新手必看)

ConcurrentHashMap 是 Java 中支持高并发、高性能的线程安全的 HashMap 实现,它作为 java.util.concurrent 并发包的一部分,与 HashTable 和通过 Collections.synchronizedMap 包装的 HashMap 相比,提供了更高的并发级别,同时保证了线程安全,且在多线程环境中的性能远优于前两者的性能。

ConcurrentHashMap 的底层存储结构在 Java 8 之前和之后有所不同,这体现了不同版本间对高并发策略的优化。

Java 8之前的ConcurrentHashMap

在 Java 8 之前,ConcurrentHashMap 内部使用分段锁机制来管理数据。

ConcurrentHashMap 将数据分为若干段,每一段就像一个小的 HashMap,拥有自己的锁。当进行插入、删除等操作时,只需要锁定对应段,而不需要锁定整个 HashMap。这样,在并发环境下,只要操作涉及的数据位于不同段中,这些操作就可以同时进行,大大提高了并发性能。

ConcurrentHashMap 分段结构如下图所示:

Java 8之后的ConcurrentHashMap

Java 8 对 ConcurrentHashMap 进行了重大改进,废弃了分段锁的设计,采用了一种更加精细的锁定机制,这种机制被称为节点锁,底层存储结构也变为了数组+链表+红黑树的复合结构,如下图所示。



在 Java 8 及之后的版本中,ConcurrentHashMap 使用了一种称为锁分离的技术。例如,更新操作(如 put()、remove() 等)通过对节点加锁来实现,而读取操作大部分时间是完全无锁的,并且通过使用 volatile 变量来保证内存可见性,从而实现更高的并发性和性能。

ConcurrentHashMap 是一种高效的并发 HashMap,通过不断地优化和改进,其底层存储结构从最初的分段锁机制演化为更精细的节点锁机制,有效地提升了在并发环境中的操作性能,在读取多写入少的场景下表现出色。

相关文章