gpt4 book ai didi

java - 如果我只从集合中读取,是否需要担心线程安全?

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:11 25 4
gpt4 key购买 nike

我想将预构建的 Map 传递给多个线程,这些线程只会同时从 Map 读取值。在这种情况下,我是否需要担心并发访问并使用 ConcurrentHashMap 而不是 HashMap?

最佳答案

您仍然需要确保在创建和初始化 Map 的线程与随后读取它的线程之间存在“先于发生”的关系。如果没有这种关系,理论上读取线程可以看到陈旧数据。

如果您在启动其他线程的线程中创建并填充 Map ... 在它执行此操作之前 ... 您应该没问题。

另一种确保安全的简单方法是执行以下操作:

public class Foo {
private final Map map;

public Foo(....) {
map = new HashMap();
// populate
}

public Map getMap() {
// If the 'map' is final, and nothing changes it apart from
// the constructor, this method doesn't need to be synchronized.
}

这两者都会导致创建/初始化与每个线程首次使用 Map 之间的“先发生”关系。

您也可以将上面的 map 声明为 volatile,但可能会导致比严格需要发生的缓存刷新次数更多;也就是说,您的性能会受到很小的影响。

关于java - 如果我只从集合中读取,是否需要担心线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com