クラスアイテムがあります
class Item {
public int count;
public Item(int count) {
this.count = count;
}
}
次に、アイテムへの参照を他のクラスのフィールドに入れます
class Holder {
public Item item;
public Holder() {
item = new Item(50);
}
}
この新しい Itemオブジェクトは安全に公開できますか? そうでない場合、なぜですか?Java Concurrency in Practice によると、新しいアイテムは完全に構築されずに公開されますが、私の意見では、新しいアイテムは完全に構築されています。そのthis
参照はエスケープされず、それへの参照とその状態は同時に公開されるため、コンシューマ スレッドは古い値を認識しません。それとも視認性の問題ですか?理由はよくわかりません。