【发布时间】:2013-05-26 15:04:05
【问题描述】:
这是一种提倡的范式,应该在同步块内的 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 如何获取锁?将锁返回给线程 1 的内部动态是什么?
【问题讨论】:
标签: java multithreading synchronization locking wait