报告对不是在相应的 synchronized 语句或 synchronized 方法中进行的 wait()notify()notifyAll() 的调用。

在一个对象上调用这些方法但该对象上没有持有锁,会导致 IllegalMonitorStateException。 这样的结构不一定是错误的,因为在调用该包含方法前可能已获取必要的锁,但即便如此,还是要仔细了解。

示例:


  class Sync {
    private final Object lock = new Object();

    void test() throws InterruptedException {
      synchronized (this) {
        lock.wait(); // 'lock.wait()' 未在 'lock' 上同步
      }
    }
  }