コンストラクターの実行後に確立されたメモリ フェンスについての私の理解を誰かが検証してくれませんか。たとえば、Stock というクラスがあるとします。
public final class Stock{
private final String ticker;
private double qty;
private double price;
public Stock ( String ticker, double qty, double price ){
this.ticker = ticker;
this.qty = qty;
this.price = price;
//I am assuming a memory fence gets inserted here.
}
public final void updateQty( double qty ){
this.qty = qty;
}
public final void updatePrice( double price ){
this.price = price;
}
}
さらに、コンストラクターが Thread1 によって実行され、Thread2によって(常に Thread2 によって)何度も呼び出されるとしますupdateQty()
。updatePrice()
私の主張は、Thread1 がオブジェクトを作成した後、オブジェクトの「可視性」が jvm 内の他のすべてのスレッドで確立されるということです。また、2 つの可変変数は Thread2 によってのみ変更されるため、ロックは必要ありません。私は正しいですか?