Por qué el bloqueo de doble comprobación es un 25% más rápido en Joshua Bloch Ejemplo de Java efectivo
Hola, abajo está el fragmento de Effective Java 2nd Edition. Aquí el autor afirma que el siguiente fragmento de código es un 25% más rápido que en el que no se usa la variable de resultado. De acuerdo con el libro "Lo que hace esta variable es garantizar que el campo se lea solo una vez en el caso común en el que ya está inicializado". . No puedo entender por qué este código sería rápido después de que el valor se inicialice como si no usáramos el resultado de la variable Local. En cualquier caso, solo tendrá una lectura volátil después de la inicialización, ya sea que use el resultado de la variable local o no.
// Double-check idiom for lazy initialization of instance fields
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;
}