Может ли кто-нибудь подтвердить мое понимание ограждения памяти, установленного после выполнения конструктора. Например, предположим, что у меня есть класс 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()
и updatePrice()
несколько раз вызываются Thread2 (всегда Thread2).
Я утверждаю, что после того, как Thread1 создает объект, «видимость» объекта устанавливается со всеми другими потоками в jvm. И поскольку две изменяемые переменные изменяются только Thread2, мне не нужна никакая блокировка. Я прав?