我有一个生产者-消费者模式的例子,其中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();
}
您可以切换它们,并且仍然可以获得相同的行为。这样做是这样完成的,因为否则您将需要一个额外的局部变量和代码行来保存您从队列中删除的元素。并不是说它很重要(它不会影响性能),但你为什么不以最简单的方式编写代码。
Work w = queue.remove(); // Unnecessary
this.notifyAll();
return w;