mdm*_*dma 9 java concurrency multithreading synchronization
为什么java.lang.Object有两种通知方法 - notify和notifyAll?似乎notifyAll至少一切都notify做了,所以为什么不一直使用notifyAll?如果notifyAll用来代替notify,程序是否仍然正确,反之亦然?是什么影响了这两种方法之间的选择?
根据 JavaDoc 的说法notify:
唤醒正在该对象的监视器上等待的单个线程。如果有任何线程正在等待该对象,则选择唤醒其中一个线程。该选择是任意的并且由实现自行决定。线程通过调用 wait 方法之一来等待对象的监视器。
例如,如果您的应用程序使用队列来放置项目,然后有许多工作线程将项目从队列中拉出,那么这可能会很有用。当某个项目准备就绪时,您可以调用notify唤醒单个工作人员来处理该项目。诚然,这个例子有点做作——在 Java 中可能有更好的方法来实现这个——但你明白了。