1.JDK 1.7
ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成
Segment 继承自 ReentrantLock,是一种可重入锁;其中,HashEntry 是用于真正存储数据的地方
static final class Segment<K,V> extends ReentrantLock implements Serializable {
// 真正存放数据的地方
transient volatile HashEntry<K,V>[] table;
// 键值对数量
transient int count;
// 阈值
transient int threshold;
// 负载因子
final float loadFactor;
Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
this.loadFactor = lf;
this.threshold = threshold;
this.table = tab;
}
}
其实这里的 HashEntry 和 HashMap 中的 HashEntry 是一样的,每个 HashEntry 是一个链表结构的元素,其成员变量包含 key、value、hash 值以及下一个节点:
static final class HashEntry<K,V> {
final int hash;
final K key;
volatile V value;
volatile HashEntry<K,V> next;
}