Есть несколько вопросов на эту тему, но большинство обходят эту проблему стороной, потому что это не цель вопроса.
Если у меня есть static volatile в моем классе:
private static volatile MyObj obj = null;
и в методе ниже я делаю:
public MyObj getMyObj() {
if (obj == null) {
obj = new MyObj();// costly initialisation
}
return obj;
}
мне нужно будет синхронизироваться, чтобы гарантировать, что только один поток записывает в поле, или любые записи будут немедленно видны для другие потоки, оценивающие условие obj == null
?
Иными словами: позволяет ли volatile вам синхронизировать доступ для записи в статическую переменную?