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