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? Какой друг может это объяснить? Спасибо за ваш ответ