JD.LOCK.WAIT occurs when an Object.wait() method is called while the method is holding two or more locks. This checker checks only local locks.

Vulnerability and risk

Waiting on a monitor while two locks are held may cause deadlock. Performing a wait releases the lock only on the object being waited on, not on any other locks. Not necessarily a problem.

Mitigation and prevention

Preferably, call wait() method without lock held, or with a lock on the same object for which the wait is called.

Example 1

      String name;
     synchronized void waitForCondition(Object lock) {
         try {
             synchronized(lock) {
                 name = "aa";
         } catch (InterruptedException e) {

JD.LOCK.WAIT is reported for line 14: Calling 'java.lang.Object.wait()' with two or more locks held '[lock, this]' could cause a deadlock.

Related checkers