2011-08-20 10 views
9

揮発性変数に書き込んだ後はどうなりますか?

揮発性変数に書き込むと、jvmがすべての不揮発性変数をメモリに同期させるようになるのだろうか。例えば、次のようなコードで何が起きるのか。

volatile int x; 
int y; 

y=5; 
x=10; 

xはメモリに書き込まれ、しかし、yには何が起こるでしょうか?それも記憶に書き込まれますか?

+1

yはvolatileとして宣言されていません...? –

+1

いいえ、意図的にvolatileとして宣言されていません。問題は、揮発性変数への書き込みがすべての変数のメモリバリアを意味するかどうかです。 – Anonymice

+0

私はそれがあなたのJavaのバージョンに依存すると思います... –

答えて

5

はい、the Java Language Specification (third edition) -- in particular section 17.4.4の規則の下で - 新しい値がxであるすべてのスレッドは、それを読み取ろうとすると新しい値のyが表示されます。 xを読み取らないスレッドは、影響を受けることは保証されていません。

ただし、この保証はJLSの第2エディションのメモリモデルには存在しませんでした。そこでは、揮発性の読み取りと書き込みは、不揮発性のメモリアクセスの順序に影響を与えませんでした。

+1

言語仕様のエディションを実際のJavaバージョンに対応させることができないすべての人々:これは、Henningが記述していることはJava 1.5以上から真実です。 ) – Voo

関連する問題