以下のコードスナイパーを検討してください。
package sync;
public class LockQuestion {
private String mutable;
public synchronized void setMutable(String mutable) {
this.mutable = mutable;
}
public String getMutable() {
return mutable;
}
}
Time1スレッドThread1は、「可変」変数を更新します。ローカルキャッシュからメインメモリにメモリをフラッシュするには、setterで同期が必要です。時間Time2(Time2> Time1、スレッド競合なし)で、スレッドThread2は可変の値を読み取ります。
質問は–ゲッターの前に同期させる必要がありますか?これによって問題が発生することはないようです。メモリは最新であり、Thread2のローカルキャッシュメモリはThread1によって無効化および更新される必要がありますが、よくわかりません。