我有一个生产者 - 消费者模式的例子,其中notifyAll
放在queue.remove()
之前。这很重要还是仅仅是因为方便?
synchronized void post(Work w) {
while (queue.isFull()) this.wait();
queue.add(w);
this.notifyAll();
}
synchronized Work get() {
while (queue.isEmpty()) this.wait();
// is the order at this point important, or could I switch this part?
this.notifyAll();
return queue.remove();
}
答案 0 :(得分:2)
您可以切换它们并仍然获得相同的行为。它以这种方式完成,因为否则您需要一个额外的局部变量和代码行来保存从队列中删除的元素。并不重要(不影响性能),但为什么不能以最简单的方式编写代码。
Work w = queue.remove(); // Unnecessary
this.notifyAll();
return w;