From 227deac6f07921fd28bb719530b5b0207e271b42 Mon Sep 17 00:00:00 2001 From: Daniil Date: Fri, 3 Aug 2018 21:14:28 +0700 Subject: [PATCH] Prefab for actual resource lock --- .../events/v3/lock/CustomReentrantLock.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 event-loop/src/main/java/mc/core/events/v3/lock/CustomReentrantLock.java diff --git a/event-loop/src/main/java/mc/core/events/v3/lock/CustomReentrantLock.java b/event-loop/src/main/java/mc/core/events/v3/lock/CustomReentrantLock.java new file mode 100644 index 0000000..35bbbc2 --- /dev/null +++ b/event-loop/src/main/java/mc/core/events/v3/lock/CustomReentrantLock.java @@ -0,0 +1,43 @@ +package mc.core.events.v3.lock; + +import mc.core.events.v3.runner.ExecutorThread; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + +public class CustomReentrantLock extends ReentrantLock { + private void checkThread() { + if (!(Thread.currentThread() instanceof ExecutorThread)) + throw new RuntimeException("Unable to obtain this resource outside Async Executor"); + } + + @Override + public void lock() { + checkThread(); + super.lock(); + } + + @Override + public void lockInterruptibly() throws InterruptedException { + checkThread(); + super.lockInterruptibly(); + } + + @Override + public boolean tryLock() { + checkThread(); + return super.tryLock(); + } + + @Override + public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException { + checkThread(); + return super.tryLock(timeout, unit); + } + + @Override + public void unlock() { + checkThread(); + super.unlock(); + } +}