Il n'y a pas de solution parfaite, à moins d'ignorer les coûts d'allocation (la plupart des programmeurs d'applications le peuvent, mais pas les rédacteurs de la bibliothèque de verrous). Ensuite, vous pouvez utiliser un wrapper
@RequiredArgsConstructor(access=AccessLevel.PRIVATE)
public final class MgLockCloseable implements AutoCloseable {
public static MgLockCloseable tryLock(Lock lock) {
return new MgLockCloseable(lock.tryLock() ? lock : null);
}
public static MgLockCloseable lock(Lock lock) {
lock.lock();
return new MgLockCloseable(lock);
}
@Override public void close() {
if (isLocked()) {
lock.unlock();
}
}
public boolean isLocked() {
return lock != null;
}
@Nullable private final Lock lock;
}
dans cette construction
try (LockCloseable lockCloseable = LockCloseable.lock(lock)) {
doSomethingUnderLock();
} // automatic release
Voir aussi ma question sur CR .