ConcurrentHashMap
使用段级锁定机制来支持并发修改。它有三个基本参数
在默认情况下,我们有每个Bucket单锁。如果桶的数量为32,那么我们将每两个桶单锁。
如果桶的数量 比并发级别<,>
,如何管理它?Map cMap = new ConcurrentHashMap(16,1,32);
通常,存储桶使用集合(链接列表)来处理在同一存储桶中发生碰撞的哈希码的项目。在上面的情况下我们是否有每个桶两个锁,如果是,那么它是如何管理的(一个桶中的一半集合使用一个锁而另一半使用第二个锁?)
我已经搜索过并且能够看到答案,如果ConcurrentHashMap
被调整大小以获得比锁定数量更多的桶,但是如果是相反的情况我无法得到答案,即:
如果并发级别高于桶数,ConcurrenthashMap如何管理?
答案 0 :(得分:4)
This code应该回答你的问题:
if (initialCapacity < concurrencyLevel) // Use at least as many bins
initialCapacity = concurrencyLevel; // as estimated threads
另请参阅documentation:
concurrencyLevel 估计并发更新线程的数量。实现可以将此值用作大小提示。