Por que o bloqueio duplo verificado é 25% mais rápido em Joshua Bloch Exemplo efetivo de Java
Oi abaixo é o trecho de Efetivo Java 2nd Edition. Aqui o autor alega que o seguinte trecho de código é 25% mais rápido do que no qual você não usa a variável de resultado. De acordo com o livro "O que essa variável faz é garantir que o campo seja lido apenas uma vez no caso comum em que ele já foi inicializado". . Eu não sou capaz de entender por que esse código seria rápido depois que o valor fosse inicializado como comparado a se não usarmos o resultado da variável Local. Em ambos os casos, você terá apenas uma leitura volátil após a inicialização, quer você use o resultado da variável local ou não.
// 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;
}