DKS*_*ore 7 java performance multithreading locking concurrenthashmap
我读到ConcurrentHashMap在多线程方面比Hashtable更好,因为在桶级别而不是映射宽锁定.每张地图最多可锁32次.想知道为什么32和为什么不超过32锁.
如果你在谈论Java ConcurrentHashMap,那么限制是任意的:
创建一个与给定地图具有相同映射的新地图.创建的映射的容量是给定映射中映射数的1.5倍或16(以较大者为准),默认加载因子(0.75)和concurrencyLevel(16).
如果你阅读了源代码,很明显最大段数是2 ^ 16,这对于不久的将来任何可能的需求都应该足够了.
您可能一直在考虑某些替代实验实现,如下所示:
此类支持硬连线预设并发级别32.这允许最多32个put和/或remove操作同时进行.
请注意,通常,当超过32个线程尝试更新单个数据时,除了同步效率之外的因素通常是瓶颈ConcurrentHashMap.
默认值不是 32,而是 16。您可以使用构造函数参数concurrency level覆盖它:
public ConcurrentHashMap(int initialCapacity,
float loadFactor,
int concurrencyLevel)
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
Map<String, String> map = new ConcurrentHashmap<String, String)(128, 0.75f, 64);
Run Code Online (Sandbox Code Playgroud)
将其更改为 64。默认值是(从 Java 6u17 开始):
initialCapacity: 16;loadFactory:0.75f;concurrencyLevel: 16。| 归档时间: |
|
| 查看次数: |
3849 次 |
| 最近记录: |