[英]How to Ensure Memory Visibility in Java when passing data across threads
[英]How do I ensure memory visibility in Java?
我有一個以這種方式構建的程序:
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) {}
包裝它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.