我有一个课程项目
class Item {
public int count;
public Item(int count) {
this.count = count;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我将在其他类的字段中引用Item
class Holder {
public Item item;
public Holder() {
item = new Item(50);
}
}
Run Code Online (Sandbox Code Playgroud)
这个新的Item对象可以安全发布吗?如果没有,为什么?根据Java Concurrency in Practice,新的Item是在没有完全构造的情况下发布的,但在我看来,新的Item是完全构造的:它的this
引用不会被转义,并且它的引用和它的状态同时发布,所以消费者线程不会看到过时的价值.或者是可见性问题.我不知道原因.