gpt4 book ai didi

java - 用于线程安全的 volatile 关键字

转载 作者:行者123 更新时间:2023-11-29 08:34:34 25 4
gpt4 key购买 nike

我有以下代码:

public class Foo {
private volatile Map<String, String> map;

public Foo() {
refresh();
}

public void refresh() {
map = getData();
}

public boolean isPresent(String id) {
return map.containsKey(id);
}

public String getName(String id) {
return map.get(id);
}

private Map<String, String> getData() {
// logic
}

}
  • 上面的代码是线程安全的还是我需要在其中添加synchronized或mutexes?如果不是线程安全的,请说明原因。

此外,我读到应该使用 AtomicReference 而不是这个,但是在 AtomicReference 类的源代码中,我可以看到该字段用于保存该值是易变的(以及一些方便的方法)。

  • 是否有使用 AtomicReference 的特定原因?

我已经阅读了多个与此相关的答案,但 volatile 的概念仍然让我感到困惑。提前致谢。

最佳答案

如果您没有修改 map 的内容(创建它时在 refresh() 内部除外),则代码中没有可见性问题。

仍然可以执行isPresent()refresh()getName()(如果没有使用外部同步)并结束使用 isPresent()==truegetName()==null

关于java - 用于线程安全的 volatile 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216390/

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