gpt4 book ai didi

java - 如果并发级别高于 Bucket 数量,ConcurrenthashMap 如何管理?

转载 作者:行者123 更新时间:2023-11-30 06:06:23 25 4
gpt4 key购买 nike

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

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

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

如果存储桶的数量小于并发级别,即如果

Map cMap = new ConcurrentHashMap(16,1,32); 

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

我已经搜索过,并且能够看到如果 ConcurrentHashMap 的大小调整为具有比锁数量更多的存储桶的答案,但我无法得到答案,如果是相反的情况该怎么办,即:

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

最佳答案

This code在构造函数中应该回答你的问题:

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

另请参阅documentation :

concurrencyLevel the estimated number of concurrently updating threads. The implementation may use this value as a sizing hint.

关于java - 如果并发级别高于 Bucket 数量,ConcurrenthashMap 如何管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com