考慮第三方類像其他線程可以看到繼承的非final字段嗎?
class A {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
我讓一成不變像
final class ImmutableA extends A {
public ImmutableA(int value) {
super.setValue(value);
}
public void setValue(int value) {
throw new UnsupportedOperationException();
}
}
的visibility guarantee for final fields在這裏並不適用。我的問題是,如果其他線程保證看到ImmutableA
的正確狀態。
如果沒有,是否有解決方案?使用委派不是一種選擇,因爲我需要ImmutableA
爲A
。
對不起,我應該更清楚地提到這一點:'A'是我不能修改的第三方類。 – maaartinus
另一種在構造函數中添加同步塊的方式,但這只是解決方案的一半,如果使用external [發生前](http://download.oracle.com/javase/6/docs/api/java/ util/concurrent/package-summary.html#MemoryVisibility)保證那麼它是可見的 –