我有以下情况.几个线程正在等待相同的条件.当得到通知时,所有应该停止等待,更改标志并返回对象:
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语句,但是这很容易受到虚假唤醒的影响.