这是一个提倡的范例,应该在同步块内的while循环内调用wait()。
我的问题是 waiting() 线程如何取回锁?
// 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 条件开始执行时,具有 Synchronized(mon) 的代码行不再执行,那么线程 1 如何获取锁?将锁定返回给 Thread 1 的内部动态是什么?