我想知道是否可以在不使用notify()的情况下在同步代码段上使用wait(),如下所示:
wait_on(B):
synchronized(B.monitor) {
B.count--
while (B.count > 0) { /* wait */ }
}
提前致谢
最佳答案
您需要notify或notifyAll来将线程从等待状态唤醒。在您的示例中,代码将进入等待状态并停留在那里(除非被中断)。
了解 wait、yield 和 sleep 之间的区别。 wait需要在synchronized block 中调用,一旦进入wait,锁就会被释放,并且线程将保持该状态直到调用notify。 Yield 将线程返回到就绪池,并让调度程序决定何时再次运行它。 sleep 意味着线程 hibernate 一段固定的时间(然后进入就绪池)。
确保您在正在同步的同一个对象上调用 wait(这里是 B.monitor)。
关于java - 在同步代码段中使用 wait() 而不使用 notification() (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234598/