public static MySingleton getInstance() {
if (_instance==null) {
synchronized (MySingleton.class) {
_instance = new MySingleton();
}
}
return _instance;
}
1.¿Hay algún problema con la implementación anterior del método getInstance? 2. ¿Cuál es la diferencia entre las dos implementaciones?patrón singleton en java. inicialización diferida
public static synchronized MySingleton getInstance() {
if (_instance==null) {
_instance = new MySingleton();
}
return _instance;
}
He visto una gran cantidad de respuestas en el patrón singleton en stackoverflow pero la pregunta que he publicado es conocer principalmente la diferencia de 'sincronizar' en el método y nivel de bloque en este caso particular.
http://stackoverflow.com/questions/70689/efficient-way-to-implement-singleton-pattern-in-java – skaffman
Hay un problema con un intrincado variación de su primer código (una variación que verifica la nulidad, primero fuera del sincronizado y luego dentro de la sincronización). Tiene que ver con la forma en que el compilador y la JVM hacen las cosas. Si está MUY interesado, puede buscar "problema Java de inicialización comprobado doble". – helios
Puede que le interese este famoso artículo sobre "bloqueo comprobado doble", que básicamente llega a la conclusión de que está roto: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf –