Java中ConcurrentHashMap的并发级别

时间:2017-06-08 15:05:38

标签: concurrenthashmap

在这种情况下,任何人都可以帮助我: 有几个线程读取&只有一个线程更新HashMap,我应该使用ConcurrentHashMap并将concurrencyLevel设置为1(因为concurrencyLevel的默认值是16),或者只使用没有直接同步的HashMap?

1 个答案:

答案 0 :(得分:0)

暂时忽略有关并发级别的问题,一般的经验法则是,如果你想安全地共享可变状态(从多个线程读取和写入),你需要某种形式的同步。

Java为您提供了很多方法来实现这一目标:

  1. source .bashrc 关键字
  2. 其中一个线程安全集合,例如ConcurrentHashMap
  3. 各种Lock实施
  4. 其中一个同步的收集包装器(例如 Collections.synchronizedMap()) - 虽然我无法想到你真正想要使用它们的情况。
  5. 根据我们对您的用例(不是很多)的了解,最好的"开箱即用"选项是使用synchronized。它并不要求您手动同步,如果您正确使用它,它可以使您的代码线程安全。

    根据文档,您似乎希望将ConcurrentHashMap参数设置为concurrencyLevel,但这些是您可以并且测试的内容。根据您实际拥有的争用程度,可能并不重要。