Java集合-ConcurrentHashMap
# ConcurrentHashMap 1.7
# 存储结构
哈希冲突通过采用数组+链表
的方式来解决。
# 分段锁机制
1.7的版本,相当于一个Hash表由多个segment
组成,而每一个 Segment
是一个类似于 HashMap
的结构,所以每一个 HashMap
的内部可以进行扩容。但是 Segment
的个数一旦初始化就不能改变。
在执行操作的过程中,首先定位到分段,然后对分段加锁,以进行安全的操作,这样避免了对整个Hash表进行加锁。
# ConcurrentHashMap 1.8
# 存储结构
哈希冲突通过数组 + 链表 / 红黑树
的方式来解决。
# 加锁原理
Java8 中的 ConcurrentHashMap
使用的 Synchronized
锁加 CAS 的机制。结构也由 Java7 中的 Segment
数组 + HashEntry
数组 + 链表 进化成了 Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。
上次更新: 2024/06/29, 15:13:44