He estado leyendo para la concurencia desde ayer y no sé muchas cosas ... Sin embargo, algunas cosas están empezando a ponerse claras ...
Entiendo por qué el doble bloqueo no es seguro (me pregunto cuál es la propagación de la rara condición que ocurra), pero volátiles corrige el problema en 1.5 + ....
pero me pregunto si esto ocurre con putifAbsent
¿Por qué ConcurrentHashMap.putifAbsent es seguro?
como ...
myObj = new myObject("CodeMonkey");
cHashM.putIfAbsent("keyy",myObj);
Luego hace esto asegura que myObj
sería del 100% intialiased cuando otro hilo hace un cHashM.get()
??? Porque podría tener una referencia isnt completamente inicializado (el doble problema de bloqueo de verificación)
Entonces, si entiendo correctamente, no hay ningún problema, como en el clásico paradigma de bloqueo de doble verificación. – GorillaApe
@Parhs: Correcto, no hay problema. – ColinD
Tiene razón. Usted mismo lo respondió en su pregunta con 'pero volátil corrige el problema en 1.5 + 'Dado que el valor devuelto por el CCHM es un valor volátil, también está a salvo de la inicialización parcial. –