首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >wait()和notify()在Java中是如何工作的?

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

Stack Overflow用户
提问于 2018-08-17 08:20:54
回答 1查看 315关注 0票数 0

我刚接触操作系统/多线程,我想知道wait()notify()是如何协同工作的。我刚刚看到了这个:Producer Consumer Solution in Java

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 08:35:30

Wait和notify是在同一个对象上调用的,这个对象被用作一个锁(在本例中,它是由局部变量pc引用的对象)。javadoc中使用的术语(这里是notify方法的api文档的开头)是“monitor”:

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

操作系统有一个线程调度器,它做出javadoc中描述的任意决策,它决定线程何时进行上下文切换或谁得到通知。

因此,当使用中的线程等待时,它就会进入休眠状态。然后,最终某个其他线程(在本例中只有两个线程获取pc上的锁)在第一个线程调用wait on的同一对象上调用notify,调度器挑选要通知的线程(必须是这里的第一个线程,因为没有其他线程在等待),被通知的线程醒来并检查是否有要使用的东西,以便它可以知道是否继续。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51886890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档