gpt4 book ai didi

java - 如何确保 Java 中的内存可见性?

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:44 24 4
gpt4 key购买 nike

我有一个以这种方式构建的程序:

private static Map<String, PoolObject> objects = new ConcurrentHashMap<>();

// Called from up to 4 different threads
public static PoolObject getObject(String id) {
return objects.get(id);
}

// Called from only one dedicated thread
public static void addObject(String id, PoolObject object) {
objects.put(id, object);
}

public static class PoolObject {
private int a, b c;
private String someString;
...
}

任何 PoolObject 内的字段都是从也调用 addObject() 的同一个专用线程修改的。如何确保 PoolObject 内部字段的更新对所有读取器线程都可见?我无法修改程序中的 PoolObject 类,因为它是外部库的一部分。

最佳答案

最简单的方法是使用 synchronized 方法为 PoolObject 编写一个包装类,或者如果只有少数地方需要进行修改,则使用 synchronized(poolObject) {} 包装它们。

关于java - 如何确保 Java 中的内存可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60582559/

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