If a lock is acquired and released within a method, then it must be released along all execution paths of that method.
Failing to do so will expose the conditional locking logic to the method’s callers and hence be deadlock-prone.
public class MyClass { public void doSomething() { Lock lock = new Lock(); lock.lock(); // Noncompliant if (isInitialized()) { // ... lock.unlock(); } } }
public class MyClass { public void doSomething() { Lock lock = new Lock(); if (isInitialized()) { lock.lock(); // ... lock.unlock(); } } }