単一変数の前に起こった関係を理解していると思います。揮発性フィールドを書き込むと、このフィールドの後続のすべての読み取りにこの新しい値が含まれます。クロスを書き込むvolatile
と、メモリバリアを越えて、新しい値がメインメモリにフラッシュされます。
Thread.start()
他のすべての場合、たとえば、synchronized
またはの新しいロックで何が起こるかについては、まだはっきりしていませんjava.util.concurrent
。それらがメモリバリアも越えるとはどういう意味ですか?どのデータがローカルキャッシュからメインメモリにフラッシュされますか?言い換えれば、交差点の範囲は何ですか?
すべてが常にフラッシュされますか?さて、に戻って、それは単一のフィールドvolatile
以上のものをフラッシュしますか?volatile