привет, у меня проблема с двойной проверкой блокировки в одноэлементном шаблоне。 в следующем коде:
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 необходимо, так почему мы должны использовать его здесь? Какой друг может объяснить это? Спасибо за ваш ответ
static-holder-class
-шаблон, упомянутый здесь - person Lino   schedule 04.07.2018