wait()与notify()的问题
生产者-消费者模型来看
public void enqueue() {
synchronized(queue) {
while (queue.full()) {
queue.wait();
}
//... 数据入列
queue.notify(); // 通知消费者,队列中有数据了。
}
}
public void dequeue() {
synchronized(queue) {
while (queue.empty()) {
queue.wait();
}
// 数据出队列
queue.notify(); // 通知生产者,队列中有空间了,可以继续放数据了。
}
}
生产者在通知消费者的同时,也通知了其他的生产者;消费者在通知生产者的同时,也通知了其他
消费者。原因在于wait()和notify()所作用的对象和synchronized所作用的对象是同一个,只能有一个对象,无法区分队列空和列队满两个条件。这正是Condition要解决的问题。