Lotna semantyczna w odniesieniu do innych pól

Załóżmy, że mam następujący kod

private volatile Service service;

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

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

Zmodyfikowane pole oznaczone jako zmienne i jego wartość nie zależy od poprzedniego stanu. Więc to jest poprawny kod wielowątkowy (nie przejmuj sięService implementacje na minutę).

O ile wiem, czytanie zmiennej lotnej jest jak wejście do zamka, z perspektywy widoczności pamięci. Dzieje się tak, ponieważ odczyt normalnych zmiennych nie może być zmieniony przy odczycie zmiennych zmiennych.

Czy to oznacza, że ​​następujący kod jest poprawny?

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();
  }
}

questionAnswers(4)

yourAnswerToTheQuestion