java-notifyAll是否从循环中删除等待而不检查条件?
如果我使用此资源启动了两个线程,并且它们都在wait()处,并且我在资源中调用了方法r(),这是否会在不检查条件的情况下唤醒两个线程? 最佳答案
不,不. notifyAll()的工作方式是,每个对象从wait()唤醒后最终都将执行其代码.但是,一次只能执行一个线程.因此,一个线程通过调用r()退出循环后,它会递增计数器,因此不会释放另一个线程.因此,只有一个线程执行到最后-不在两个线程中执行.
我假设您的意思是当您的意思是“不检查条件”时退出while循环.如上所示,两个线程都不是这种情况. TL; DR:notifyAll()一次只允许一个线程执行,但是所有这些线程最终都将最终执行. 来源:https://stackoverflow.com/a/37046/10869762 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |