当concurrencyLevel大于ConcurrentHashMap的容量时会发生什么?

时间:2016-09-10 05:46:32

标签: java concurrency concurrenthashmap

我已经在一个问题上摸不着头脑了一段时间,我环顾四周但却未能找到答案。我想知道如果concurrencyLevel大于地图的capacity会发生什么。

默认情况下,两者都是16,这意味着每个存储桶都有一个锁。如果capacity为32且concurrencyLevel 16,则锁定将保存在2个存储桶上。但是当concurrencyLevel为32且capacity为16时会发生什么?

每个桶是否由2个锁定,如果concurrencyLevelcapacity的分布不均匀,如24和16,或者其他什么,会发生什么?

1 个答案:

答案 0 :(得分:5)

没有什么特别的事情发生。您查看了ConcurrentHashMap的文档了吗?它说:“另外,为了与此类的先前版本兼容,构造函数可以选择指定预期的concurrencyLevel作为内部大小调整的附加提示。”这是一个提示,而不是限制。此外,在concurrencyLevel:“估计并发更新线程的数量。实现可以使用此值作为大小提示。“注意:”可以“。因此,如果发生任何事情,大小会变得不同。也许

如果您想了解更多实施细节,可以学习源代码。它可用。在Java 1.8中,它包含以下两行:

    if (initialCapacity < concurrencyLevel)   // Use at least as many bins
        initialCapacity = concurrencyLevel;   // as estimated threads