此代码会导致信号丢失吗?如果是的话,怎么办?
private Object lock = new Object();
private boolean conditionMet = false;
public void waitForCondition() throws InterruptedException {
synchronized (lock) {
while (!conditionMet) {
lock.wait();
}
// Proceed when condition is met
}
}
public void signalCondition() {
synchronized (lock) {
conditionMet = true;
lock.notify();
}
}
您不会丢失通知,但会将除一根线程之外的所有线程留在内部
wait
。
除非您要调用
signalCondition()
的次数与等待线程的数量相同。
要解决此问题,请使用
notifyAll()
而不是 notify()
。