我正在阅读一本名为《Java并发实践》的书,作者给出了一个不安全的对象发布的例子。以下是例子:
public Holder holder;
public void initialize(){
holder = new Holder(42);
}
并且
public class Holder {
private int n;
public Holder(int n) { this.n = n; }
public void assertSanity() {
if (n != n)
throw new AssertionError("This statement is false.");
}
}
这是否意味着当一个对象还没有完全构造时,其他线程就可以访问它?我猜当线程A调用holder.initialize();
并且线程B调用holder.assertSanity();
时,如果线程A尚未执行this.n = n;
,则条件n != n
将不会被满足。
这是否也意味着如果我有一个更简单的代码,例如:
int n;
System.out.println(n == n); //false?