Thread and Locks http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5に関するJLSドキュメントを調べていました。
class FinalFieldExample {
final int x;
int y;
static FinalFieldExample f;
public FinalFieldExample() {
x = 3;
y = 4;
}
static void writer() {
f = new FinalFieldExample();
}
static void reader() {
if (f != null) {
int i = f.x; // guaranteed to see 3
int j = f.y; // could see 0
}
}
}
上記の例 (ex no 17.5-1) で、fy がゼロと見なされる方法について説明したセクションと混同しています。リーダー スレッドは、オブジェクト f を null として読み取ります。この場合、何も実行されません。または、何らかの参照を使用してオブジェクト f を読み取ります。オブジェクト f に参照がある場合、参照を f に割り当てることができるように複数の書き込みスレッドが実行されていても、コンストラクターはその実行を完了している必要があり、コンストラクターが実行された場合、fy は 4 と見なされます。
fy =0 はどのような条件で可能でしょうか?
ありがとう