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