小编gom*_*mul的帖子

如何唤醒等待相同条件的所有线程?

我有以下情况.几个线程正在等待相同的条件.当得到通知时,所有应该停止等待,更改标志并返回对象:

 public Object getObject(){
    lock.lock();
    try {
        while (check)){
            condition.await();
        }

        return returnObjectAndSetCheckToFalse();
    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码不起作用,因为更快的线程可能会将check标志更改为false,而第二个更慢的线程将再次阻塞.可能有一个逻辑,即两个等待线程都将被唤醒,它们都将check flag设置为false,并返回对象?或许它是矛盾的?

最简单的方法是将wait更改为if语句,但是这很容易受到虚假唤醒的影响.

java concurrency multithreading notify wait

3
推荐指数
1
解决办法
1664
查看次数

标签 统计

concurrency ×1

java ×1

multithreading ×1

notify ×1

wait ×1