La variabile emitting
può essere volatile? il metodo emit()
viene chiamato da diversi thread ed emette deve essere visibile.
Ma è accessibile solo nei blocchi synchronized
. Gli // ...
sono posti in cui il lavoro è terminato, ma in questo caso non viene fatto riferimento a emitting
.È volatile necessario, in caso di accesso solo sincronizzato
Quindi, se la struttura di synchronized
è risolvibile, ho ancora bisogno di un volatile
per emitting
o no? (E perché?)
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