【发布时间】:2012-05-15 20:16:23
【问题描述】:
我不确定 volatile 关键字是否也应该用于非基元。我有一个由一个线程设置/分配并由另一个线程访问的类成员。我应该声明这个成员 volatile 吗?
private /* volatile */ Object o;
public void setMember(Object o) {
this.o = o;
}
public Object getMember() {
return o;
}
这里,setMember(...) 由一个线程调用,getMember() 由另一个线程调用。
如果它是一个布尔值,例如,答案是肯定的。
我使用的是 Java 1.4,并且这种情况下的成员是只读的。所以我只关心在这种情况下的可见性,因此我对 volatile 关键字的问题。
【问题讨论】: