java当并发级别大于ConcurrentHashMap的容量时会发生什么?
一段时间以来,我一直在为一个问题绞尽脑汁。我环顾四周,但未能找到答案。我想知道如果concurrencyLevel
大于地图的capacity
会发生什么
默认情况下,两者都是16,这意味着每个铲斗都有一个锁。如果capacity
是32,而concurrencyLevel
是16,则锁将被保持在两个桶上。但是当concurrencyLevel
是32而capacity
是16时会发生什么呢
每个存储桶是否由两个锁持有,那么如果concurrencyLevel
和capacity
的分布不均匀,比如24和16,或者其他什么,会发生什么
# 1 楼答案
没有什么特别的事发生。你查过
ConcurrentHashMap
的文档了吗?它说:“此外,为了与这个类的早期版本兼容,构造函数可以选择指定一个预期的concurrencyLevel
,作为内部大小调整的额外提示。”这是一个暗示,而不是限制。此外,关于concurrencyLevel
:“并发更新线程的估计数量。实现可能会使用此值作为调整大小的提示。”注:“五月”。因此,如果发生任何事情,大小会有所不同。也许吧如果您想要进一步的实现细节,可以研究源代码。它是可用的。在Java 1.8中,它包含以下两行: