ConcurrentHashMap
ConcurrentHashMap 的基本实现逻辑与 Post not found: HashMap 相似,数组 + 链表 + Post not found: 红黑树。
历史版本
注:ConcurrentHashMap ==在 jdk1.5 上引入的,在 jdk1.8 中出现源码变动。==
在 jdk1.5 到 jdk1.7,ConcurrentHashMap 底层数据结构是 Segment 数组组成,每个 Segment 类似于一个 HashTable。1
2
3
4
5
6
7
8
9/**
* Stripped-down version of helper class used in previous version,
* declared for the sake of serialization compatibility
*/
static class Segment<K,V> extends ReentrantLock implements Serializable {
private static final long serialVersionUID = 2249069246763182397L;
final float loadFactor;
Segment(float lf) { this.loadFactor = lf; }
}Segment 继承于 Post not found: ReentrantLock ,在 put 操作时,先根据 hash 计算索引定位到具体的 Segment,然后在操作时只需要锁住相应 Segment 就可以了。