Czy zmienna emitting
może być niestabilna? Metoda emit()
jest wywoływana z różnych wątków i muszą być widoczne. Jest dostępny tylko w blokach synchronized
. // ...
to miejsca, w których praca jest wykonywana, ale tutaj nie ma odniesienia do emitting
.Czy lotny jest potrzebny, w przypadku tylko zsynchronizowanego dostępu
Tak więc, jeśli struktura synchronized
jest ustalić, czy nadal potrzebują volatile
dla emitting
czy nie? (I dlaczego?)
static final class C {
boolean emitting = false; // shall be volatile ?
public void emit() {
synchronized (this) {
if (emitting) {
return;
}
// ...
emitting = true;
}
// ...
synchronized (this) {
if (!condition()) {
emitting = false;
return;
}
}
// ...
}
Frank