wait() 如何在 Java 中恢复 Lock
2022-09-04 02:52:14
这是一个提倡的范例,即 wait() 应该在同步块内的 while 循环中调用。
我的问题是等待()线程如何取回锁?
// Thread 1
synchronized (mon) {
while (!condition)
mon.wait();
// Do something
}
//Thread 2
synchronized (mon) {//set condition appropriately
mon.notify();
}
假设线程 1 首先运行并开始等待条件。它释放锁,线程 2 获取锁设置条件并通知线程 1。现在线程 1 获取锁,检查条件并开始执行“执行某些操作”。
我的问题是,当线程1被通知时,它从while条件开始执行,具有Synced(mon)的代码行永远不会再次执行,然后线程1如何获取锁定?将锁送回线程 1 的内部动态是什么?