读取对象的volatile引用是否保证原子读取其属性的最新值?

Tom*_*ker 5 java concurrency

假设所有属性都不是long或者double,读取volatile对象的引用是否保证原子读取其属性的最新值?

这是一个具体的例子.

public class Foo {
    private int bar;

    public int getBar() {
        return this.bar;
    }

    public void setBar(int bar) {
        this.bar = bar;
    }
}

public class Baz {
    private volatile Foo foo;
}
Run Code Online (Sandbox Code Playgroud)

线程A可写入FooBar财产的任何时间.线程B只能读取FooBar属性.如果线程B Bar通过Baz它访问属性,它会读取最新值Bar吗?

ass*_*ias 8

总之没有.的volatile关键字仅适用于foo引用,而不是对底层对象的字段.

所以,你会需要标记barvolatile太来实现你的描述结果.