我想知道是否可以在不使用 notify() 的情况下在同步的代码上使用 wait(),如下所示:
wait_on(B):
synchronized(B.monitor) {
B.count--
while (B.count > 0) { /* wait */ }
}
提前致谢
我想知道是否可以在不使用 notify() 的情况下在同步的代码上使用 wait(),如下所示:
wait_on(B):
synchronized(B.monitor) {
B.count--
while (B.count > 0) { /* wait */ }
}
提前致谢
您需要 notify 或 notifyAll 将线程从等待状态中唤醒。在您的示例中,代码将进入等待并留在那里(除非被中断)。
了解wait、yield和sleep之间的区别。需要在同步块中调用等待,一旦进入等待,锁就会被释放,并且线程保持在该状态直到调用通知。Yield 将线程返回到就绪池,并让调度程序决定何时再次运行它。睡眠意味着线程休眠一段固定的时间(然后从那里进入就绪池)。
确保在要同步的同一对象上调用 wait(这里是 B.monitor)。
不!唯一的选择是等待超时,这肯定对您没有帮助。
如果你把 the/* wait */
改成对 的调用wait()
,而没有人会调用notify()
or notifyAll()
,那么这个线程将永远不会醒来......
如果这是您想要的障碍,您将需要通知所有其他线程:
wait_on(B) {
synchronized(B.monitor) {
B.count--
while (B.count > 0) {
B.monitor.wait()
}
B.monitor.notifyAll();
}
}
问候,
皮埃尔-吕克