类成员变量需要Java“volatile”吗?

时间:2014-06-11 10:18:25

标签: java volatile

我有一个关于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"?

谢谢, 汤姆

2 个答案:

答案 0 :(得分:4)

没有重定向。 myClass是不稳定的,bolVal不是。来自myClass的分配和读取工作为易失性。分配/读取bolVal来自/来自

答案 1 :(得分:0)

在Java中,除了long和double以外,所有类型的读写字段都由JVM原子地发生,并且如果使用VOLATILE修饰符声明了该字段,则甚至long和double也将被原子地读写。原子保证,我们将获得100%的变量值或将要计算的变量值,或者变量中不会有任何中间结果。