增加并发hashmap分段

时间:2015-03-01 21:33:34

标签: java concurrenthashmap

我正在浏览并发哈希映射,据我所知,它们默认分为16个部分。每个部分都有自己的键值对。如果一个线程想要锁定一个键值对,它将锁定整个段。 (如果我错了,请纠正我)。现在在link中提到了当作家较少时,chm是好的。我想知道我们是否增加了段的数量,我的意思是使它与数字键值对相当,不能为在同一个CHM上运行的大量编写器线程创建并发性。此外,由于CHM中存在锁定,因此关于内存消耗的成本是多少。

由于

Jayendra

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,则会在JavaDoc

中正确回答
  

更新操作之间允许的并发性由   可选的concurrencyLevel构造函数参数(默认为16),即   用作内部尺寸的提示。该表是内部的   分区以尝试允许指示的并发数   没有争用的更新。因为哈希表中的位置是   基本上是随机的,实际的并发性会有所不同。理想情况下,你   应该选择一个值来容纳尽可能多的线程   同时修改表。使用明显高于的值   你需要可以浪费空间和时间,而价值可以低得多   导致线程争用。但是过高估计和低估了内部   一个数量级通常不会产生明显的影响。一个   当知道只有一个线程时,一个值是合适的   修改,所有其他人只会阅读。此外,调整此或任何其他   哈希表的类型是一个相对较慢的操作,所以,如果可能的话,   最好提供预期表格大小的估计值   构造