ConcurrentHashMap

ConcurrentHashMap 的基本实现逻辑与 Post not found: HashMap 相似,数组 + 链表 + Post not found: 红黑树

  1. 历史版本

    注: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 就可以了。

阅读更多