在这种情况下,任何人都可以帮助我: 有几个线程读取&只有一个线程更新HashMap,我应该使用ConcurrentHashMap并将concurrencyLevel设置为1(因为concurrencyLevel的默认值是16),或者只使用没有直接同步的HashMap?
答案 0 :(得分:0)
暂时忽略有关并发级别的问题,一般的经验法则是,如果你想安全地共享可变状态(从多个线程读取和写入),你需要某种形式的同步。
Java为您提供了很多方法来实现这一目标:
source .bashrc
关键字ConcurrentHashMap
Lock
实施Collections.synchronizedMap()
) - 虽然我无法想到你真正想要使用它们的情况。 根据我们对您的用例(不是很多)的了解,最好的"开箱即用"选项是使用synchronized
。它并不要求您手动同步,如果您正确使用它,它可以使您的代码线程安全。
根据文档,您似乎希望将ConcurrentHashMap
参数设置为concurrencyLevel
,但这些是您可以并且测试的内容。根据您实际拥有的争用程度,可能并不重要。