tag studio programacion para móviles example edición desarrollo desarrollar curso con aprende aplicaciones java android virtual-machine dalvik double-checked-locking

java - studio - programacion android pdf 2018



Doble comprobación de bloqueo en Android (2)

De acuerdo con muchos, el idioma común de bloqueo de doble comprobación está roto para java, a menos que esté ejecutando la versión 1.5 o posterior y use la palabra clave volatile .

Una muestra de bloqueo de 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... }

El ejemplo proviene de este artículo, que también proporciona detalles sobre cómo solucionarlo: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

El análisis de Pugh anterior es para máquinas virtuales Java. Trabajo en Android y utilizo con frecuencia bibliotecas que emplean el bloqueo de doble comprobación. ¿El modelo de memoria de dalvik VM es compatible con este idioma?


Encontré un artículo muy bueno sobre esa pregunta: http://www.javamex.com/tutorials/double_checked_locking_fixing.shtml

Enuncia claramente 3 formas de arreglar DCL. Y parece que en su pregunta, el campo de Ayuda debe declararse volátil, de lo contrario no funciona.

Cuando se trata de uso, es decir, RoboGucie en su caso, creo que preferiría el método de carga de clases mencionado en el artículo. Es más claro para mí y tan eficiente.


La respuesta a esta question implica que los modelos de memoria deben ser los mismos y que el nuevo lenguaje de bloqueo con doble control funcionará.