首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >notify() vs notifyAll()?

notify() vs notifyAll()?
EN

Stack Overflow用户
提问于 2014-03-16 19:18:36
回答 1查看 1.1K关注 0票数 0

我偶然遇到了Java: notify() vs. notifyAll() all over again,但仍然不能满足自己。

xagyg很好地解释了这一点,但最终它变得非常复杂,很难记住这个概念。

我在这里用简单的日常生活例子尽我最大的努力,这样如果有人忘记了,我和其他人可以回到这里。我的理解来源是上面链接中的xagyg回答,但试图简化这里的事情。

假设有两个人去电影院,发现电影院里座无虚席。但是票房人员说,乔恩告诉他们,有一张票是留给总统的。如果他不来,他就会把它卖掉。然后告诉乔恩,好的,我们在附近的酒店等着,有什么消息请通知我们。这些家伙去酒店睡觉。现在总裁没有露面,现在乔恩有两个选择,第一个是通知其中一个人,让其他人睡觉。如果他这样做了,一个人可以去看电影,而另一个人可能会继续睡觉(直到他没有得到通知。我假设这家伙有一年没有睡觉了:))。另一种选择是他通知(唤醒)他们两个,选择他们中的任何一个(在实际的java示例程序中没有选择,而是它的vm/线程调度器) movie.In,这种情况下,他将把其他人留在酒店房间,因为他可以制造某种问题:(。一旦演出结束,如果有票的话这个人就可以去看下一场演出了。将票证视为锁,将剧院视为对象。notify和notifyAll就是这样做的。因此,很明显,当遇到混乱时,notifAll比通知更好

现在考虑生产者/消费者的例子。

假设有两个消费者线程在商店中等待生产。现在producer所做的是,他在单次go和exit中生产两个项目。现在,如果生产者使用notify,那么只有一个线程可以使用,而其他线程将永远等待。

但是,如果生产者在这里使用notifyAll(),那么两个线程都可以一次使用一个

让我知道我的理解是否正确?

EN

回答 1

Stack Overflow用户

发布于 2014-03-16 19:59:22

我认为你在最后一句话中写的不正确。生产者每次产生一个对象都应该通知消费者,所以如果创建了两个对象,它应该调用两次通知,而不是只调用一次。这样,如果您使用notify而不是notifyAll,您仍然可以同时使用两个使用者线程

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

https://stackoverflow.com/questions/22436132

复制
相关文章

相似问题

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