如果并发级别高于桶数,ConcurrenthashMap如何管理?

时间:2017-05-23 01:26:43

标签: java concurrenthashmap

ConcurrentHashMap使用段级锁定机制来支持并发修改。它有三个基本参数

  • 铲斗数量。 (默认初始大小= 16)
  • 并发级别。 (默认大小= 16)
  • 负载系数。(默认大小= 0.75)

在默认情况下,我们有每个Bucket单锁。如果桶的数量为32,那么我们将每两个桶单锁

如果桶的数量 比并发级别<,>

,如何管理它?
Map cMap = new ConcurrentHashMap(16,1,32); 

通常,存储桶使用集合(链接列表)来处理在同一存储桶中发生碰撞的哈希码的项目。在上面的情况下我们是否有每个桶两个锁,如果是,那么它是如何管理的(一个桶中的一半集合使用一个锁而另一半使用第二个锁?)

我已经搜索过并且能够看到答案,如果ConcurrentHashMap被调整大小以获得比锁定数量更多的桶,但是如果是相反的情况我无法得到答案,即:

如果并发级别高于桶数,ConcurrenthashMap如何管理?

1 个答案:

答案 0 :(得分:4)

构造函数中的

This code应该回答你的问题:

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

另请参阅documentation

  

concurrencyLevel 估计并发更新线程的数量。实现可以将此值用作大小提示。