rd2*_*d22 1 java concurrency concurrenthashmap
我已经在一个问题上摸不着头脑了一段时间,我环顾四周但却未能找到答案.我想知道如果concurrencyLevel大于capacity地图会发生什么.
默认情况下,两者都是16,这意味着每个桶都有一个锁.如果capacity将是32和concurrencyLevel16,将锁定在2个桶上.但是当concurrencyLevel32 岁时才会发生什么capacity?
每个铲斗是否由2个锁定,如果分布concurrencyLevel和capacity不均匀,如24和16,或者什么,会发生什么?
什么都不会发生.你查过文件了ConcurrentHashMap吗?它说:"另外,为了与此类的先前版本兼容,构造函数可以选择将预期指定concurrencyLevel为内部大小调整的附加提示."这是一个提示,而不是限制.此外concurrencyLevel:"估计并发更新线程的数量.实现可以使用此值作为大小提示."注意:"可以".因此,如果发生任何事情,大小会变得不同.也许.
如果您想了解更多实施细节,可以学习源代码.它可用.在Java 1.8中,它包含以下两行:
if (initialCapacity < concurrencyLevel) // Use at least as many bins
initialCapacity = concurrencyLevel; // as estimated threads
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |