Изменчивая семантика по отношению к другим областям
Предположим, у меня есть следующий код
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();
}
}