java.util.concurrent.locks.Lock
offers far more powerful and flexible locking operations than are available with
synchronized
blocks. So synchronizing on a Lock
instance throws away the power of the object, as it overrides its better
locking mechanisms. Instead, such objects should be locked and unlocked using one of their lock
and unlock
method
variants.
Noncompliant code example
Lock lock = new MyLockImpl();
synchronized(lock) { // Noncompliant
// ...
}
Compliant solution
Lock lock = new MyLockImpl();
if (lock.tryLock()) {
try {
// ...
} finally {
lock.unlock();
}
}