Doble comprobación de bloqueo en Android
Según muchos, el lenguaje de bloqueo de doble verificación algo común está roto para Java a menos que esté ejecutando 1.5 o posterior y use elvolatile
palabra clave.
Una muestra de cerradura con doble comprobación rota:
// Broken multithreaded version
// "Double-Checked Locking" idiom
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null)
helper = new Helper();
}
return helper;
}
// other functions and members...
}
La muestra proviene de este artículo, que también proporciona detalles sobre cómo solucionarlo:http: //www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htm
l análisis anterior de @ Pugh es para máquinas virtuales Java. Trabajo en Android y uso con frecuencia bibliotecas que emplean el bloqueo de doble verificación. ¿El modelo de memoria del dalvik VM admite este idioma?