Java двойная проверка блокировки синглтона должна использовать ключевое слово volatile?

Привет, у меня есть проблема с двойной проверкой блокировки в шаблоне синглтона в следующем коде:

private volatile   static DoubleCheckSingleton instance;

private DoubleCheckSingleton() {}


public static DoubleCheckSingleton getInstance(){

    if(instance==null){ //first

        synchronized (DoubleCheckSingleton.class){

            if(instance==null){  // second
                instance=new DoubleCheckSingleton();
            }

        }

    }

    return instance;

}

Предположим, что теперь есть два потока, A и B соответственно. После этого они исполняются одновременно. Согласно определению "происходит до", после того, как один поток снимает блокировку, другой поток получает блокировку, тогда последний может видеть предыдущее изменение.

Если это так, я не думаю, что ключевое слово volatile необходимо, так зачем нам здесь использовать ключевое слово volatile? Какой друг может это объяснить? Спасибо за ваш ответ

0 ответов

Другие вопросы по тегам