Sto leggendo sul doppio blocco di controllo da Effective Java
.
Il codice esegue le seguenti operazioni:In che modo l'assegnazione a una variabile locale aiuta qui?
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;
}
Si dice che l'uso result
sembra non necessari, ma assicura che in realtà il field
è di sola lettura solo una volta nel caso comune in cui è già inizializzato.
Ma non lo capisco.
Qual è la differenza con fare if(field == null)
direttamente?
Non capisco perché if (result == null)
è diverso, figuriamoci meglio come affermato.
Qualche aiuto per capire questo per favore?
Il 'risultato' viene utilizzato ulteriormente nel metodo? –
Ci piacerebbe vedere "etc" ... Qual è il riferimento di pagina per Java efficace? Non ho la mia copia con me - ma altri potrebbero. –
@VictorSorokin: vedere l'aggiornamento – Jim