¿Por qué es volátil? Se utiliza en el bloqueo de doble verificación
DesdeHead First libro de patrones de diseño, el patrón singleton con doble bloqueo verificado se ha implementado de la siguiente manera:
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évolatile
esta siendo usado. Novolatile
@ uso anula el propósito de usar el bloqueo doblemente comprobado, es decir, el rendimiento?