有人可以验证我对构造函数执行后建立的内存围栏的理解。例如,假设我有一个名为 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 执行,updateQty()
然后由Thread2updatePrice()
调用多次(始终由 Thread2 调用)。
我的论点是,在 Thread1 创建对象之后,对象的“可见性”与 jvm 中的所有其他线程建立起来。而且由于这两个可变变量仅由 Thread2 更改,因此我不需要任何锁定。我对么?