Por que o volátil é usado no bloqueio com verificação dupla
A partir deHead First livro de padrões de design, o padrão singleton com bloqueio duplo verificado foi implementado como abaixo:
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;
}
}
Eu não entendo o porquêvolatile
está sendo usado. Nãovolatile
o uso anula o objetivo de usar o bloqueio com verificação dupla, ou seja, o desempenho?