我在“Java编程思想”一书中读到了以下代码。
我认为:
使用 "if" 是可以的,因为 "wait" 意味着它必须获取 obj 的锁监视器,并且只有一个线程可以在此处执行。
(1) 为什么这里使用 "while (condition)" 而不是 "if"?
(2) 执行 "obj.wait()" 时会发生什么?当前线程是否释放了 "obj" 的锁?
(3) 当另一个线程执行 "obj.notify()" 时,上一个线程会发生什么?(它是否重新获取了 "obj" 的锁?如果是,则必须条件不匹配,因此 "if" 就足够了。)
我错了吗?
synchronized(obj)
{
while (condition_not_matched)
{
obj.wait();
}
//continue
dosomething();
}
我认为:
使用 "if" 是可以的,因为 "wait" 意味着它必须获取 obj 的锁监视器,并且只有一个线程可以在此处执行。
(1) 为什么这里使用 "while (condition)" 而不是 "if"?
(2) 执行 "obj.wait()" 时会发生什么?当前线程是否释放了 "obj" 的锁?
(3) 当另一个线程执行 "obj.notify()" 时,上一个线程会发生什么?(它是否重新获取了 "obj" 的锁?如果是,则必须条件不匹配,因此 "if" 就足够了。)
我错了吗?
notifyAll
“应该被优先考虑”。有些情况下它是恰当的,而有些情况下则不是。 - Wyzard