<分区>
emitting
变量应该是可变的吗? emit()
方法从不同的线程调用,并且 emit 必须是可见的。
但它只能在 synchronized
block 中访问。 //...
是完成工作的地方,但是这里没有引用 emitting
。
那么,如果synchronized
的结构是固定的,我还需要一个volatile
来emitting
吗? (为什么?)
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;
}
}
// ...
}
弗兰克