Java 中丢失信号

问题描述 投票:0回答:1

此代码会导致信号丢失吗?如果是的话,怎么办?


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();
    }
}
java multithreading concurrency java.util.concurrent java-threads
1个回答
0
投票

您不会丢失通知,但会将除一根线程之外的所有线程留在内部

wait

除非您要调用

signalCondition()
的次数与等待线程的数量相同。

要解决此问题,请使用

notifyAll()
而不是
notify()

© www.soinside.com 2019 - 2024. All rights reserved.