考虑第三方类像其他线程可以看到继承的非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)保证那么它是可见的 –