アプリ版:「スタンプのみでお礼する」機能のリリースについて

effective javaのItem71に次のサンプルコードがあるのですが、
なぜ、volitileを使用しているのでしょうか?

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;
}

参考URL:
ttp://www.oracle.com/technetwork/articles/java/bloch-effective-08-qa-140880.html

A 回答 (1件)

フィールドが初期化済みの場合、ロックをかけずにフィールドを読んでいるからです。


他のスレッドが更新したフィールドを確実に読み取るには
■互いにロックをかける
■volatile にする

の2つしか方法が有りません。volatileがなければ、初期化済みであることさえ
読み落とす可能性があります。必須です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!