易失性变量 - 实践中的Java并发

时间:2018-04-05 18:34:34

标签: java concurrency

在Java Concurrency一书中提到 - volatile变量的可见性效果超出了volatile变量本身的值。当线程A写入易失性变量并且随后线程B读取相同的变量时,在写入易失性变量之前,A可见的所有变量的值在读取volatile变量后变为B可见。因此,从内存可见性的角度来看,编写volatile变量就像退出synchronized块一样,读取volatile变量就像进入synchronized块一样。

因此,通过上述方法,volatile关键字的替代方法是使用同步的getter方法?我理解对volatile变量的任何更新都会传播到访问它的所有线程,并且使用volatile for read-only比使用synchronized块更好,因为它不会执行昂贵的锁定。

private volatile String shopName;

public boolean getShopName() {
    if (shopName == null) {
        synchronized(this) {
            if (shopName == null) {
                shopName = "abc";
            }
        }
    }
    return shopName;
}

0 个答案:

没有答案