我有一个关于Java" volatile"的问题。关键字:
假设我们有以下类:
public class BooleanValClass {
private boolean bolVal = false;
public boolean getVal() {
return this.bolVal;
}
public void setVal(boolean val) {
bolVal = val;
}
}
现在,假设一个Thread正在使用这个类与" volatile"关键字:
private volatile BooleanValClass myClass = new BooleanValClass();
我是否必须附加" volatile"关键字也是成员字段" bolVal" class" BooleanValClass"或者是" volatile"对象引用某种"重定向"对班级的所有成员" BooleanValClass"?
谢谢, 汤姆
答案 0 :(得分:4)
没有重定向。 myClass
是不稳定的,bolVal
不是。来自myClass
的分配和读取工作为易失性。分配/读取bolVal
来自/来自
答案 1 :(得分:0)
在Java中,除了long和double以外,所有类型的读写字段都由JVM原子地发生,并且如果使用VOLATILE修饰符声明了该字段,则甚至long和double也将被原子地读写。原子保证,我们将获得100%的变量值或将要计算的变量值,或者变量中不会有任何中间结果。