报告在当前线程持有两个锁时可能发生的对 wait() 方法的调用。

由于调用 wait() 只释放目标上的一个锁,因此持有两个锁时的等待很容易导致死锁。

示例:


  synchronized (lockA) {
    synchronized (lockB) {
      lockB.wait(); //警告
      //线程 A 卡在这里,持有 lockA
    }
  }

  synchronized (lockA) { //线程 B 无法进入此块和释放线程 A
    lockB.notify();
  }