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};
}