зачем использовать volatile с синхронизированным блоком?

Я видел несколько примеров. в java, где они выполняют синхронизацию блока кода, чтобы изменить некоторую переменную, в то время как эта переменная изначально была объявлена ​​изменчивой. Я видел это в примере одноэлементного класса, где они объявили уникальный экземпляр как изменчивый, и они синхронизировали блок, который инициализирует этот экземпляр ... Мой вопрос: почему мы объявляем его изменчивым, пока мы синхронизируем его, почему нам нужно делать и то, и другое ?? разве одного из них недостаточно для другого??

public class someClass {
volatile static uniqueInstance = null;

public static someClass getInstance() {
        if(uniqueInstance == null) {
            synchronized(someClass.class) {
                if(uniqueInstance == null) {
                    uniqueInstance = new someClass();
                }
            }
        }
        return uniqueInstance;
    }

Заранее спасибо.

42
задан Dorgham 12 March 2012 в 12:11
поделиться