からダブル チェック ロックについて読んでいEffective Javaます。コードは次のことを行います。
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;
}
を使用する必要はないresultように見えますが、実際には、field既に初期化されている一般的なケースで一度だけ読み取られることが保証されます。
しかし、私はこれを理解していません。if(field == null)直接行うこととの違いは何ですか?if (result == null)述べたように優れていることは言うまでもなく、 なぜ異なるのかわかりません。