From 55f6a77c29d1c041f38b62199cf70384b8f88003 Mon Sep 17 00:00:00 2001 From: Dhruva Krishnamurthy Date: Fri, 11 Jan 2019 07:33:47 -0800 Subject: [PATCH] Allow checking if lock is held by a thread - helps when using thread pools * When using executors/thread pools to acquire and release locks, it is helpful to be able to check if the lock is held by a specified thread and not just the 'current thread'. --- redisson/src/main/java/org/redisson/RedissonLock.java | 9 +++++++-- redisson/src/main/java/org/redisson/api/RLock.java | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonLock.java b/redisson/src/main/java/org/redisson/RedissonLock.java index 5a56b4a41..ab18e3f4f 100644 --- a/redisson/src/main/java/org/redisson/RedissonLock.java +++ b/redisson/src/main/java/org/redisson/RedissonLock.java @@ -453,7 +453,12 @@ public class RedissonLock extends RedissonExpirable implements RLock { @Override public boolean isHeldByCurrentThread() { - RFuture future = commandExecutor.writeAsync(getName(), LongCodec.INSTANCE, RedisCommands.HEXISTS, getName(), getLockName(Thread.currentThread().getId())); + return isHeldByThread(Thread.currentThread().getId()); + } + + @Override + public boolean isHeldByThread(long threadId) { + final RFuture future = commandExecutor.writeAsync(getName(), LongCodec.INSTANCE, RedisCommands.HEXISTS, getName(), getLockName(threadId)); return get(future); } @@ -847,4 +852,4 @@ public class RedissonLock extends RedissonExpirable implements RLock { } -; \ No newline at end of file +; diff --git a/redisson/src/main/java/org/redisson/api/RLock.java b/redisson/src/main/java/org/redisson/api/RLock.java index ede752687..c47accaba 100644 --- a/redisson/src/main/java/org/redisson/api/RLock.java +++ b/redisson/src/main/java/org/redisson/api/RLock.java @@ -98,6 +98,15 @@ public interface RLock extends Lock, RExpirable, RLockAsync { */ boolean isLocked(); + /** + * Checks if this lock is held by the current thread + * + * @param threadId Thread ID of locking thread + * @return true if held by given thread + * otherwise false + */ + boolean isHeldByThread(long threadId); + /** * Checks if this lock is held by the current thread *