wait() 和 notify() 在 Java 中是如何工作的?



我是操作系统/多线程的新手,我想知道wait()notify()如何协同工作。我刚刚看到这个: Java 中的生产者消费者解决方案

我有点困惑。假设我用PC.consume()方法调用了wait()。当我到达PC.produce()中显示notify()的行时,如何等待PC.consume()知道这是被通知的那个?可能还有其他可以通知的地方,那么它如何确切地知道要通知哪个?

谢谢!

等待和通知在同一个对象上调用,该对象用作锁(在示例中,这是局部变量 pc 引用的对象(。 javadoc 中使用的术语(这里是通知方法的 api 文档的开头(是"monitor":

唤醒正在此对象的监视器上等待的单个线程。如果有任何线程正在等待此对象,则选择其中一个线程进行唤醒。选择是任意的,由实现自行决定。线程通过调用其中一个等待方法在对象的监视器上等待。

操作系统有一个线程调度程序,它正在做出javadoc中描述的任意决定,它决定线程何时进行上下文切换或谁收到通知之类的事情。

因此,当消费中的线程等待时,它会进入休眠状态。然后最终其他线程(在示例中只有两个线程在 pc 上获取锁(调用通知同一对象上第一个线程调用 wait on,调度程序选择要通知的线程(必须是这里的第一个线程,因为没有其他线程在等待(,通知的线程唤醒并检查是否有任何要消耗的内容,以便它知道是否继续。

最新更新