我想知道是否可以在不使用notify()的情况下对同步代码使用wait(),如下所示:
wait_on(B):
synchronized(B.monitor) {
B.count--
while (B.count > 0) { /* wait */ }
}
提前致谢
答案 0 :(得分:5)
您需要notify或notifyAll来唤醒线程的等待状态。在您的示例中,代码将进入等待并停留在那里(除非被中断)。
了解等待,产量和睡眠之间的区别。等待需要在同步块中调用,一旦输入等待锁定被释放,线程将保持该状态,直到调用notify。 Yield将线程返回到就绪池,并让调度程序决定何时再次运行它。睡眠意味着线程在一段固定的时间内处于休眠状态(并从那里进入就绪池)。
确保在正在同步的同一个对象上调用wait(这是它的B.monitor)。
答案 1 :(得分:0)
没有!唯一的选择是等待超时,这肯定无法帮助你。
答案 2 :(得分:0)
如果您将/* wait */
更改为wait()
的来电,并且没有人会拨打notify()
或notifyAll()
,那么此线程将永远不会被唤醒... < / p>
答案 3 :(得分:0)
如果它是您想要的屏障,您需要通知所有其他线程:
wait_on(B) {
synchronized(B.monitor) {
B.count--
while (B.count > 0) {
B.monitor.wait()
}
B.monitor.notifyAll();
}
}
此致
皮尔吕克