考虑下面的代码狙击手:
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 将读取 mutable 的值。
问题是——我需要把同步放在 getter 之前吗?看起来这不会导致任何问题 - 内存应该是最新的,并且 Thread2 的本地缓存应该由 Thread1 失效和更新,但我不确定。