首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Notify后面跟着另一个notify

Notify后面跟着另一个notify
EN

Stack Overflow用户
提问于 2013-04-04 01:05:32
回答 2查看 129关注 0票数 2

如果您通知一个锁,然后立即再次通知该锁,会发生什么情况?假设有2个或更多的线程在等待该锁。能保证唤醒两个线程吗?或者可能只有一个线程被唤醒,这意味着第二个通知变得过时?

代码语言:javascript
复制
lock.notify();
lock.notify();

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 01:08:22

假设有2个或更多线程在等待该锁。能保证唤醒两个线程吗?

是。每个notify从等待队列中获取一个线程,并将其放入阻塞队列中--被唤醒的线程必须首先访问相关的synchronized锁。如果只有一个线程在等待锁,那么第二个notify()将不会执行任何操作。

重要的是要认识到线程不会立即开始执行。因为它必须在lock上的synchronized块中才能执行wait(),所以它必须再次访问lock才能运行。可能已有多个其他线程在阻塞队列中,等待访问lock

票数 5
EN

Stack Overflow用户

发布于 2013-04-04 01:12:55

我怀疑其行为类似于调用notifyAll() (在本例中,它更像是notifyTwo())

被唤醒的线程将以通常的方式与可能正在积极竞争同步此对象的任何其他线程竞争;例如,被唤醒的线程在成为锁定此对象的下一个线程方面没有任何可靠的特权或劣势。

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

https://stackoverflow.com/questions/15793667

复制
相关文章

相似问题

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