変数が他のスレッドによって変更される可能性がある場合、メモリバリアがなければ安全に読み取ることはできないと言えますか?
1 に答える
1
はい、かなり。スレッド T1 の変数に (w) 書き込み、スレッド T2 から同じ変数を読み取る (r) 場合、( w) は (r) に表示されます。Java メモリ モデル ( JLS 17.4.5 ) では、事前発生関係が存在する状況が定義されています。
- モニターのロック解除は、そのモニターの後続のすべてのロックの前に発生します。
- 揮発性フィールド (§8.3.1.4) への書き込みは、そのフィールドの後続のすべての読み取りの前に発生します。
- スレッドでの start() の呼び出しは、開始されたスレッドのアクションの前に発生します。
- スレッド内のすべてのアクションは、他のスレッドがそのスレッドの join() から正常に戻る前に発生します。
- オブジェクトのデフォルトの初期化は、プログラムの他のアクション (デフォルト書き込み以外) の前に発生します。
于 2012-09-15T17:09:51.140 に答える