Изменчивая семантика по отношению к другим областям

Предположим, у меня есть следующий код

private volatile Service service;

public void setService(Service service) {
  this.service = service;
}

public void doWork() {
  service.doWork();
}

Измененное поле помечено как изменчивое и его значение не зависит от предыдущего состояния. Итак, это правильный многопоточный код (небеспокоюсь оService реализации за минуту).

Насколько я знаю, чтение изменчивой переменной похоже на ввод блокировки с точки зрения видимости памяти. Это's потому что чтение нормальных переменных не может быть переупорядочено с чтением изменчивых переменных.

Означает ли это, что следующий код правильный?

private volatile boolean serviceReady = false;
private Service service;

public void setService(Service service) {
  this.service = service;
  this.serviceReady = true;
}

public void doWork() {
  if ( serviceReady ) {
    service.doWork();
  }
}

Ответы на вопрос(4)

Ваш ответ на вопрос