volatile 引用

2019-06-12  本文已影响0人  不存在的里皮

参考

Java - Volatile reference object and its member fields visibility

正文

java引用只能保证引用本身的可见性,而不能保证其成员变量的可见性。
如果要做到这一点,需要用synchronized方法同时设置这些变量,并用synchronized方法返回这些变量的数组。
synchronized的底层还是基于操作系统的mutex lock,所以,我们还是要利用锁的机制,也就是说,用ReentrantLock去设置和获取两个变量也是可以的。

public synchronized void setValues(int a, int b) {
    this.a = a;
    try {
        TimeUnit.MICROSECONDS.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    this.b = b;
}

public synchronized int[] getValues() {
    return new int[]{a, b};
}
上一篇下一篇

猜你喜欢

热点阅读