Estoy leyendo acerca de bloqueo de doble verificación desde Effective Java
.
El código hace lo siguiente:¿Cómo ayuda la asignación a una variable local aquí?
private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) { // First check (no locking)
synchronized(this) {
result = field;
if (result == null) // Second check (with locking)
field = result = computeFieldValue();
}
}
return result;
}
Se dice que el uso de result
parece que no sean necesarios, pero en realidad asegura que el field
solamente se lee sólo una vez en el caso común donde ya se ha inicializado.
Pero no entiendo esto.
¿Cuál es la diferencia con hacer if(field == null)
directamente?
No entiendo por qué if (result == null)
es diferente, y mucho menos mejor como se indica.
¿Alguna ayuda entendiendo esto por favor?
¿El 'resultado 'se usa más adelante en el método? –
Nos gustaría ver "etc" ... ¿Cuál es la referencia de página para Java efectivo? No tengo mi copia conmigo, pero otros podrían. –
@VictorSorokin: Consulte la actualización – Jim