【发布时间】:2017-10-22 18:58:51
【问题描述】:
ConcurrentHashMap 使用段级锁定 机制来支持并发修改。它具有三个基本参数
- 存储桶数。 (默认初始大小 = 16)
- 并发级别。 (默认大小 = 16)
- 负载系数。(默认大小 = 0.75)
在默认情况下,我们每个桶都有一个锁。如果桶数设为 32,那么我们将 每两个桶有一个锁。
如果桶数少于并发级别,即如果
,如何管理Map cMap = new ConcurrentHashMap(16,1,32);
通常一个桶使用一个集合(链表)来存储在同一个桶中具有冲突代码的项目。在上述情况下,每个桶有两个锁吗,如果是,那么它是如何管理的(桶中的一半集合是否使用一个锁而另一半使用第二个锁?)
如果ConcurrentHashMap 的大小被调整为比锁的数量更多的桶,我已经搜索并能够看到答案,但如果是相反的情况,我无法得到答案,即:
如果并发级别高于桶数,ConcurrenthashMap 如何管理?
【问题讨论】: