生产者 - 消费者应用程序中的notify vs notifyAll

时间:2011-05-06 14:51:11

标签: java multithreading notify

Java Tutorials包含使用受保护块的Producer-Consumer应用程序的基本example。他们还简要说明了notify与notifyAll的区别和典型用例。

关于示例代码的问题:

是否可以更改put和take方法的代码

    //Notify producer that status has changed.
    notifyAll();

    //Notify consumer that status has changed.
    notifyAll();

使用notify()而不是notifyAll()并且仍然可以正确实现Producer-Consumer模式吗?

1 个答案:

答案 0 :(得分:0)

如果可能有多个消费者(或生产者)需要通知所有消费者,否则只有一个消费者会醒来消费,所有其他消费者都会睡觉,直到生产者意外地唤醒他们。 在大多数情况下,我已经看到notifyAll()更好(即可能性能最小但问题少)解决方案。