15

単一変数の前に起こった関係を理解し​​ていると思います。揮発性フィールドを書き込むと、このフィールドの後続のすべての読み取りにこの新しい値が含まれます。クロスを書き込むvolatileと、メモリバリアを越えて、新しい値がメインメモリにフラッシュされます。

Thread.start()他のすべての場合、たとえば、synchronizedまたはの新しいロックで何が起こるかについては、まだはっきりしていませんjava.util.concurrent。それらがメモリバリアも越えるとはどういう意味ですか?どのデータがローカルキャッシュからメインメモリにフラッシュされますか?言い換えれば、交差点の範囲は何ですか?

すべてが常にフラッシュされますか?さて、に戻って、それは単一のフィールドvolatile以上のものをフラッシュしますか?volatile

4

1 に答える 1

12

メモリバリアを超えると、JVMはすべてのローカル(現在のスレッドのコンテキストで)にキャッシュされた変数をメインメモリと同期します。さらに、メインメモリでダーティとしてマークされているローカルにキャッシュされたデータをすべて削除します。

揮発性について-はい、単一の揮発性フィールドだけでなく、ローカルにキャッシュされたすべてのものをメインメモリと同期します(1.5以降)

http://www.javamex.com/tutorials/synchronization_volatile_java_5.shtml

于 2012-04-02T20:56:10.767 に答える