Почему volatile используется в двойной проверке блокировки
ИзHead First В книге «Шаблоны проектирования» шаблон Singleton с двойной проверкой блокировки реализован следующим образом:
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
Я не понимаю почемуvolatile
используется. неvolatile
использование поражение цели использования двойной проверки блокировки, т. е. производительность?