簡體   English   中英

如何確保 Java 中的內存可見性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM