如果不发生争用,则在读取时需要同步

Pet*_*iuk 9 java concurrency multithreading locking concurrent-programming

考虑下面的代码狙击:

package sync;

public class LockQuestion {
    private String mutable;

    public synchronized void setMutable(String mutable) {
        this.mutable = mutable;
    }

    public String getMutable() {
        return mutable;
    }   
}
Run Code Online (Sandbox Code Playgroud)

在Time1线程Thread1将更新'mutable'变量.在setter中需要同步,以便将内存从本地缓存刷新到主内存.在时间Time2(Time2> Time1,没有线程争用)线程Thread2将读取mutable的值.

问题是 - 我需要在getter之前进行同步吗?看起来这不会导致任何问题 - 内存应该是最新的,Thread2的本地缓存内存应该由Thread1无效和更新,但我不确定.

Ano*_*non 4

不要想知道,为什么不直接使用java.util.concurrent中的原子引用呢?

(就其价值而言,我对happens-before的阅读并不能保证Thread2会看到可变的变化,除非它也使用synchronized……但我总是对JLS的那部分感到头疼,所以使用原子引用)