【问题标题】:Regarding ConcurrentHashMap, what does the following mean?关于ConcurrentHashMap,下面是什么意思?
【发布时间】:2013-07-16 05:04:14
【问题描述】:

直接来自ConcurrentHashMap javadocs

更新操作之间允许的并发由 可选的 concurrencyLevel 构造函数参数(默认 16),即 用作内部尺寸调整的提示。该表在内部 分区以尝试允许指定数量的并发 无争用更新。因为在哈希表中的放置是 本质上是随机的,实际并发会有所不同。

当他们说:“用作内部调整大小的提示”时,我不明白这一点。大小不应该由容量而不是由并发级别决定吗?

【问题讨论】:

  • 我猜他们的意思是它作为分区(或段)数量的提示,而不是地图中存储桶的数量。

标签: java map concurrency


【解决方案1】:

表是内部分区的 - 这意味着他们将表划分为 ConcurrencyLevel 分区,希望他们可以执行那么多并发更新而不会发生任何冲突。

但不能保证散列数据会很好地落在这些分区中。

【讨论】:

  • 实际上,正如问题所说,这是一个提示,而不是绝对值。实际的分区数就是从这个级别推导出来的。
  • 所以容量和并发级别之间有严格的关系对吧?这也许就是为什么默认值为 16 16 0.75(负载因子)的原因。
  • 不,没有严格的关系。为什么你认为有?容量将简单地拆分为分区数。
  • 如果容量小于concurrencyLevel怎么办?
  • 由构造函数处理。它保证每个分区的容量至少为 2。请注意,我可以通过查看免费提供的源代码来回答这些问题。为什么不看呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 2013-07-11
  • 1970-01-01
  • 2022-01-20
  • 2021-10-30
  • 2010-10-15
相关资源
最近更新 更多