Java-java中的notify和notifyall具体在哪些场景下使用哪一个比较好?

发布于 2016-11-02 08:15:56 字数 393 浏览 1509 评论 1

在多线程编程中,我们需要对利用同步原语对多线程中的race condition进行同步。其中等待原语中的条件变量(condition variable)顾名思义就是一个或多个线程等待某个布尔表达式为真,即等待别的线程“唤醒”它。具体而言,java object内置的wait()、notify()、notifyall()是条件变量。

notify()和notifyall()具体的区别即前者为唤醒某一个等待线程让它继续运行,而notifyall()则使得所有等待线程退出wait状态并再次竞争某个锁。看似notify()和notifyall()在很多场景下可以互换,其实我觉得应该不然。这里想问的是,notify和notifyall分别有哪些优点和缺点,分别使用与哪些具体的场景?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

归属感 2017-06-29 17:52:12

如果某个事情导致你需要多个等待线程都去处理,那么 notifyAll(),如果某事情导致只需要一个线程处理,那么就 notify()。
还是用餐厅做菜和端盘子的来表达,如果厨师一次只做出来一个菜,并且马上在窗口放一盘菜,然后按铃( notify)通知 一个服务员就可以了。如果厨师做好了菜都先放到自己的灶台上,然后一下子端了很多盘菜到窗口,那么就需要使劲按铃(notifyAll),让所有的服务员都过来看看能不能碰碰运气拿到一盘菜。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文