De Cabeza En primer libro de patrones de diseño, el patrón Singleton con bloqueo doble comprobación se ha implementado de la siguiente manera:¿Por qué es volátil utilizado en este ejemplo de una doble comprobación de bloqueo
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;
}
}
no entiendo por qué es ser volatile
usado. ¿El uso de volatile
no derrota el propósito del uso de doble bloqueo comprobado, es decir, el rendimiento?
Pensé que el doble bloqueo comprobado estaba roto, ¿alguien lo solucionó? –
Por lo que vale, descubrí que los patrones de diseño de Head First son un libro horrible del que aprender. Cuando miro hacia atrás, tiene mucho sentido ahora que aprendí los patrones en otra parte, pero aprender sin conocer los patrones realmente no sirvió para su propósito. Pero es muy popular, así que tal vez solo era yo siendo denso. :-) – corsiKa
@DavidHeffernan He visto este ejemplo utilizado como la única manera en que se puede confiar en que el jvm haga el DCL. –