ConcurrentHashMap 源码分析

在上文我们对 HashMap进行了分析,而HashMap是线程不安全的, 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,为什么说它是并发的容器呢? 我们会在下文获得答案

构造方法

  • ConcurrentHashMap()

    创建一个新的,空的Map与默认的初始表大小(16)。

  • ConcurrentHashMap(int initialCapacity)

    创建一个新的空的Map,其初始表格大小适应指定数量的元素,而不需要动态调整大小。

  • ConcurrentHashMap(int initialCapacity, float loadFactor)

    根据给定的元素数量( initialCapacity )和初始表密度( loadFactor ),创建一个新的,空的Map,初始的表格大小。

  • ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)

    创建具有基于给定数量的元件(初始表大小的新的空映射 initialCapacity ),表密度( loadFactor ),和同时更新线程(数 concurrencyLevel )。

  • ConcurrentHashMap(Map<? extends K,? extends V> m)

    创建与给定Map相同的映射的新Map。

重要的变量

  • private transient volatile int sizeCtl;

    正在初始化表或调整表大小:-1表示初始化,否则-(1+活动的调整大小线程数)。 否则,当table为null时,保留创建时要使用的初始表大小,或0表示默认值。初始化后,保存下一个要调整表大小的元素计数值。

put(k,v)

initTable()

Last updated