5
変数emitting
は揮発性になりますか? emit()
メソッドが異なるスレッドから呼び出され、emitが可視である必要があります。
しかし、それはブロックでのみアクセスされます。 // ...
は作業が行われる場所ですが、ここではemitting
は参照されません。同期アクセスのみの場合、揮発性が必要です
したがって、の構造が修正されている場合は、emitting
にはまだvolatile
が必要ですか? (その理由は?)
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;
}
}
// ...
}
フランク