虚假唤醒
进入同步方法后,判断不符合要求,进行wait等待。被唤醒后并没有重新进行判断,直接从等待处往下执行,导致数据异常。
解决方案:每次唤醒后重新判断。用while代替if
synchronized (obj) {
while (
obj.wait(timeout);
... // Perform action appropriate to condition
}
-jdk1.8 Object wait()文档
进入同步方法后,判断不符合要求,进行wait等待。被唤醒后并没有重新进行判断,直接从等待处往下执行,导致数据异常。
解决方案:每次唤醒后重新判断。用while代替if
synchronized (obj) {
while (
obj.wait(timeout);
... // Perform action appropriate to condition
}
-jdk1.8 Object wait()文档