【发布时间】:2011-02-19 12:46:58
【问题描述】:
为什么java.lang.Object 有两个通知方法——notify 和notifyAll?似乎notifyAll 至少完成了notify 所做的所有事情,那么为什么不一直使用notifyAll 呢?如果使用notifyAll 而不是notify,程序是否仍然正确,反之亦然?是什么影响了这两种方法的选择?
【问题讨论】:
-
这个问题的答案就在 StackOverflow 上:Java notify() vs. notifyAll()。
-
对该问题的公认答案暗示了一个答案 - 区别在于性能,使用 notifyAll 唤醒无法执行实际工作的线程只是性能问题。所以我认为这回答了这个问题 - notifyAll 总是正确的 - 只是没有那么高效。
-
从 Java 5(2004 年)开始,添加了一个新的并发库。 (这个库实际上更老了)我建议你使用这些类,我不鼓励使用 notify 或 notifyAll。
标签: java multithreading concurrency synchronization