Должен ли я синхронизировать статическую изменчивую переменную?

Есть несколько вопросов на эту тему, но большинство обходят эту проблему стороной, потому что это не цель вопроса.

Если у меня есть static volatile в моем классе:

private static volatile MyObj obj = null;

и в методе ниже я делаю:

public MyObj getMyObj() {
    if (obj == null) {
        obj = new MyObj();// costly initialisation
    }
    return obj;
}

мне нужно будет синхронизироваться, чтобы гарантировать, что только один поток записывает в поле, или любые записи будут немедленно видны для другие потоки, оценивающие условие obj == null?

Иными словами: позволяет ли volatile вам синхронизировать доступ для записи в статическую переменную?

7
задан Alex 22 May 2012 в 07:49
поделиться