diff --git a/vpro-shared-util/src/main/java/nl/vpro/util/locker/ObjectLocker.java b/vpro-shared-util/src/main/java/nl/vpro/util/locker/ObjectLocker.java index a4c27d026..eb178c3de 100644 --- a/vpro-shared-util/src/main/java/nl/vpro/util/locker/ObjectLocker.java +++ b/vpro-shared-util/src/main/java/nl/vpro/util/locker/ObjectLocker.java @@ -63,7 +63,7 @@ private ObjectLocker() { */ static final Map> LOCKED_OBJECTS = new ConcurrentHashMap<>(); - + public static final BiPredicate CLASS_EQUALS = (o1, o2) -> Objects.equals(o1.getClass(), o2.getClass()); static boolean strictlyOne; static boolean monitor; @@ -129,7 +129,7 @@ public static T withKeyLock( Serializable id, @NonNull String reason, @NonNull Callable callable) { - return withObjectLock(id, reason, callable, ObjectLocker.LOCKED_OBJECTS, (o1, o2) -> Objects.equals(o1.getClass(), o2.getClass())); + return withObjectLock(id, reason, callable, ObjectLocker.LOCKED_OBJECTS, CLASS_EQUALS); } public static T withKeyLock( @@ -143,7 +143,7 @@ public static T withKeyLock( consumer, callable, ObjectLocker.LOCKED_OBJECTS, - (o1, o2) -> Objects.equals(o1.getClass(), o2.getClass()) + CLASS_EQUALS ); } @@ -158,6 +158,8 @@ public static T withKeyLock( } + + /** * @param key The key to lock on * @param reason A description for the reason of locking, which can be used in logging or exceptions @@ -194,10 +196,16 @@ public static T withObjectLock( } } + public static LockHolderCloser acquireLock( + final Serializable key, + final @NonNull String reason, + final @NonNull Map> locks) throws InterruptedException { + return acquireLock(key, reason, locks, CLASS_EQUALS); + } @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") - private static LockHolderCloser acquireLock( + public static LockHolderCloser acquireLock( final K key, final @NonNull String reason, final @NonNull Map> locks, @@ -442,7 +450,7 @@ public void disable(boolean interrupt) { } } - private static class LockHolderCloser implements AutoCloseable { + public static class LockHolderCloser implements AutoCloseable { @Getter final LockHolder lockHolder;