多线程正确性:等待不循环

时间:2016-03-23 23:55:31

标签: java android multithreading wait findbugs

请考虑以下代码:

private boolean waitIfPaused() {
    AtomicBoolean pause = engine.getPause();
    if (pause.get()) {
        synchronized (engine.getPauseLock()) {
            if (pause.get()) {
                L.d(LOG_WAITING_FOR_RESUME, memoryCacheKey);
                try {
                    engine.getPauseLock().wait(); //here
                } catch (InterruptedException e) {
                    L.e(LOG_TASK_INTERRUPTED, memoryCacheKey);
                    return true;
                }
                L.d(LOG_RESUME_AFTER_PAUSE, memoryCacheKey);
            }
        }
    }
    return isTaskNotActual();
}

来自Android Studio的Findbugs插件抱怨这种方法的第七行,它说:

  

等待不循环   此方法包含对java.lang.Object.wait()的调用,该调用不在循环中。如果监视器用于多个条件,则调用者打算等待的条件可能不是实际发生的条件。

有人知道我该如何解决这个问题?

0 个答案:

没有答案