З книги "Шаблони дизайну Head First" , одиночний шаблон із подвійним перевіреним замком реалізований, як показано нижче:
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
перешкоджає використання цілі використання подвійно перевіреного блокування, тобто продуктивності?