vi algunos ejemplos en java donde realizan la sincronización en un bloque de código para cambiar alguna variable, mientras que la variable se declaró originalmente volátil .. Vi que en un ejemplo de la clase Singleton, donde declararon la instancia única como volátil y que Sychronized el bloque que inicializa esa instancia ... Mi pregunta es por qué lo declaramos volátil mientras nos sincronizamos, ¿por qué tenemos que hacer ambas cosas? no es uno de ellos es suficiente para el otro?¿por qué usar volátiles con bloque sincronizado?
public class someClass {
volatile static uniqueInstance = null;
public static someClass getInstance() {
if(uniqueInstance == null) {
synchronized(someClass.class) {
if(uniqueInstance == null) {
uniqueInstance = new someClass();
}
}
}
return uniqueInstance;
}
gracias de antemano.
¿Qué es "volátil static uniqueInstance = null;" ? –