【发布时间】:2015-10-06 15:53:11
【问题描述】:
emitting 变量应该是 volatile 吗? emit() 方法是从不同的线程调用的,emit 必须是可见的。
但它只能在synchronized 块中访问。 // ... 是完成工作的地方,但此处未引用 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;
}
}
// ...
}
弗兰克
【问题讨论】:
标签: java concurrency