この質問は、完璧な質問だと思うので、この質問の継続と拡張です。ローカル変数への割り当てはここでどのように役立ちますか?
Item 71
この質問はofに基づいており、フィールド アクセスEffective Java
の目的でローカル変数を導入してパフォーマンスを高速化することが提案されています。volatile
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;
}
だから、私の質問はより一般的です:
volatile
フィールドの値をローカル変数に代入して、常にフィールドにアクセスする必要がありますか? (最高のパフォーマンスをアーカイブするため) .
つまり、いくつかの慣用句:
いくつかの
volatile
フィールドがありますvolatileField
。マルチスレッド メソッドでその値を読み取りたい場合は、次のようにする必要があります。
- 同じ型のローカル変数を作成します:
localVolatileVariable
- volatile フィールドの値を割り当てます。
localVolatileVariable = volatileField
このローカル コピーから値を読み取ります。例:
if (localVolatileVariable != null) { ... }
- 同じ型のローカル変数を作成します: