Как мне обеспечить видимость памяти в Java? - PullRequest
1 голос
/ 08 марта 2020

У меня есть программа, которая структурирована таким образом:

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 в моей программе, поскольку он является частью внешней библиотеки.

1 Ответ

0 голосов
/ 08 марта 2020

Самый простой способ - написать класс-обертку для PoolObject с synchronized методами или, если есть только несколько мест, где вы вносите изменения, оберните их с помощью synchronized(poolObject) {}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...