【发布时间】:2011-01-06 11:19:52
【问题描述】:
在 Java 中,我知道 volatile 关键字提供了变量的可见性。问题是,如果变量是对可变对象的引用,volatile 是否也提供对该对象内部成员的可见性?
在下面的示例中,如果多个线程正在访问volatile Mutable m 并更改value,它是否正常工作?
例子
class Mutable {
private int value;
public int get()
{
return a;
}
public int set(int value)
{
this.value = value;
}
}
class Test {
public volatile Mutable m;
}
【问题讨论】:
-
为了比较,你可能想看看 AtomicReference 这样做是正确的并且是内置的。
-
如果您只阅读过
Test.m,那么根本就没有happens-before关系建立。
标签: java concurrency volatile mutable