diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2017-09-27 11:08:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-27 11:08:17 +0200 |
commit | e87be0cd3f23a3e4af62aad6dd38fb62ff733947 (patch) | |
tree | 3e0db29de524151e4dfe325110587a89582d77de | |
parent | f6699e3eef27daa06b0fbb15a2f848265d3a5927 (diff) | |
parent | b5686d5bbb9f5d7447747099097d5b290694da07 (diff) |
Merge pull request #3541 from vespa-engine/freva/lock-javadoc
Add javadoc
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java | 7 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java | 20 |
2 files changed, 27 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java index 2a3c70d31d2..b0d26bfeb1c 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLock.java @@ -1,6 +1,8 @@ package com.yahoo.concurrent.classlock; /** + * An acquired lock which is released on close + * * @author valerijf */ public class ClassLock implements AutoCloseable { @@ -12,6 +14,11 @@ public class ClassLock implements AutoCloseable { this.clazz = clazz; } + /** + * Releases this lock + * + * @throws IllegalArgumentException if this lock has already been released + */ @Override public void close() { classLocking.unlock(clazz, this); diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java index 27b020b578d..5330e869396 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java @@ -5,16 +5,33 @@ import java.util.Map; import java.util.function.BooleanSupplier; /** + * This class is injectable to Vespa plugins and is used to acquire locks cross + * application deployments. + * * @author valerijf */ public class ClassLocking { private final Map<String, ClassLock> classLocks = new HashMap<>(); private final Object monitor = new Object(); + /** + * Locks key. This will block until the key is acquired. + * Users of this <b>must</b> close any lock acquired. + */ public ClassLock lock(Class<?> clazz) { return lockWhile(clazz, () -> true); } + /** + * Locks key. This will block until the key is acquired or the interrupt condition is + * no longer true. Condition is only checked at the start, everytime a lock is released + * and when {@link #interrupt()} is called. + * + * Users of this <b>must</b> close any lock acquired. + * + * @throws LockInterruptException if interruptCondition returned false before + * the lock could be acquired + */ public ClassLock lockWhile(Class<?> clazz, BooleanSupplier interruptCondition) { synchronized (monitor) { while (classLocks.containsKey(clazz.getName())) { @@ -45,6 +62,9 @@ public class ClassLocking { } } + /** + * Notifies {@link #lockWhile} to check the interrupt condition + */ public void interrupt() { synchronized (monitor) { monitor.notifyAll(); |