volatile int x;
int y;
y=5;
x=10;
xはメモリに書き込まれ、しかし、yには何が起こるでしょうか?それも記憶に書き込まれますか?
volatile int x;
int y;
y=5;
x=10;
xはメモリに書き込まれ、しかし、yには何が起こるでしょうか?それも記憶に書き込まれますか?
はい、the Java Language Specification (third edition) -- in particular section 17.4.4の規則の下で - 新しい値がx
であるすべてのスレッドは、それを読み取ろうとすると新しい値のy
が表示されます。 x
を読み取らないスレッドは、影響を受けることは保証されていません。
ただし、この保証はJLSの第2エディションのメモリモデルには存在しませんでした。そこでは、揮発性の読み取りと書き込みは、不揮発性のメモリアクセスの順序に影響を与えませんでした。
言語仕様のエディションを実際のJavaバージョンに対応させることができないすべての人々:これは、Henningが記述していることはJava 1.5以上から真実です。 ) – Voo
yはvolatileとして宣言されていません...? –
いいえ、意図的にvolatileとして宣言されていません。問題は、揮発性変数への書き込みがすべての変数のメモリバリアを意味するかどうかです。 – Anonymice
私はそれがあなたのJavaのバージョンに依存すると思います... –