Почему двойная проверка блокировки на 25% быстрее в примере с Joshua Bloch Effective Java
Привет ниже, фрагмент из Effective Java 2nd Edition. Здесь автор утверждает, что следующий фрагмент кода на 25% быстрее, чем тот, в котором вы не используете переменную результата. По книге "Эта переменная гарантирует, что поле будет прочитано только один раз в общем случае, когда оноs уже инициализирован. " , Я не могу понять, почему этот код будет быстрым после инициализации значения по сравнению с, если мы не используем результат локальной переменной. В любом случае после инициализации у вас будет только одно энергозависимое чтение независимо от того, используете вы локальную переменную или нет.
// 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;
}