メソッドを持つクラスではsynchronized
、スレッドがそのようなメソッドに入ると、メイン メモリからのオブジェクトの状態でキャッシュを更新し、そのようなメソッドを離れると、メイン メモリのオブジェクトの状態への変更を書き込むことがわかっています。
しかし、synchronized
メソッドがない場合、スレッドはそのオブジェクトの状態を取得するためにメイン メモリにアクセスしたり (もちろん初めての場合を除く)、変更された状態をメモリに書き戻したりするでしょうか? はいの場合、どのような条件で?
頭に浮かぶ明らかな考えの1つは、キャッシュが「いっぱい」で汚れている場合、スレッドはデータをさらに読み込む前にキャッシュをメインメモリにフラッシュする必要があるか、キャッシュが無効になっている場合は破棄して最新のものを取得する必要があるということですメインメモリからのデータ。これは正しいです?そのような「自動」メモリ同期が発生する他の条件はありますか?