From 147b2ff28d5f02a1a0a5619d2d4e834d38812b44 Mon Sep 17 00:00:00 2001 From: Daniil Date: Sun, 5 Aug 2018 13:46:00 +0700 Subject: [PATCH] Migrated ResourceRunnable to use PoorMansLock --- .../main/java/mc/core/events/EventPipelineTask.java | 13 +++++++------ .../java/mc/core/events/lock/LockObserveList.java | 11 +++++++++++ .../java/mc/core/events/runner/ExecutorThread.java | 11 +++-------- .../mc/core/events/runner/ResourceRunnable.java | 8 +++----- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/event-loop/src/main/java/mc/core/events/EventPipelineTask.java b/event-loop/src/main/java/mc/core/events/EventPipelineTask.java index bed7d5d..b2af902 100644 --- a/event-loop/src/main/java/mc/core/events/EventPipelineTask.java +++ b/event-loop/src/main/java/mc/core/events/EventPipelineTask.java @@ -5,13 +5,12 @@ import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import mc.core.events.api.EventQueueOwner; +import mc.core.events.lock.LockObserveList; import mc.core.events.runner.EventExecutorService; import mc.core.events.runner.ResourceRunnable; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; import java.util.List; -import java.util.concurrent.locks.Lock; @RequiredArgsConstructor @Getter @@ -41,7 +40,7 @@ public class EventPipelineTask { RegisteredEventHandler handler = handlers.get(currentIndex); if (!event.isCanceled() || !handler.isIgnoreCancelled()) { - List locks = getLocks(handler); + LockObserveList locks = getLocks(handler); service.addTask(new ResourceRunnable() { @Override @@ -60,7 +59,7 @@ public class EventPipelineTask { } @Override - public List getLocks() { + public LockObserveList getLocks() { return locks; } }); @@ -70,12 +69,14 @@ public class EventPipelineTask { } } - private List getLocks(RegisteredEventHandler handler) { - List locks = new ArrayList<>(); + private LockObserveList getLocks(RegisteredEventHandler handler) { + LockObserveList locks = new LockObserveList(); +/* if (handler.isPluginSynchronize()) locks.add(manager.getResourceManager().getPluginLock(handler.getPlugin())); +*/ return locks; } diff --git a/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java b/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java index 800a1b6..cf3ba5d 100644 --- a/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java +++ b/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.function.Consumer; public class LockObserveList implements Consumer { + public static LockObserveList EMPTY_LIST = new LockObserveList(); private List locks = new ArrayList<>(); private Runnable callback; @@ -32,6 +33,16 @@ public class LockObserveList implements Consumer { return true; } + public void lockAll() { + for (PoorMansLock lock : locks) + lock.lock(); + } + + public void unlockAll() { + for (PoorMansLock lock : locks) + lock.unlock(); + } + @Override public void accept(PoorMansLock lock) { if (!lock.isLocked()) { diff --git a/event-loop/src/main/java/mc/core/events/runner/ExecutorThread.java b/event-loop/src/main/java/mc/core/events/runner/ExecutorThread.java index 9797fde..8ff52f0 100644 --- a/event-loop/src/main/java/mc/core/events/runner/ExecutorThread.java +++ b/event-loop/src/main/java/mc/core/events/runner/ExecutorThread.java @@ -1,7 +1,5 @@ package mc.core.events.runner; -import java.util.concurrent.locks.Lock; - public class ExecutorThread extends Thread { private EventExecutorService service; @@ -25,15 +23,12 @@ public class ExecutorThread extends Thread { } void executeTask(ResourceRunnable runnable) { - for (Lock lock : runnable.getLocks()) { - lock.lock(); - } + runnable.getLocks().lockAll(); try { runnable.run(); } finally { - for (Lock lock : runnable.getLocks()) { - lock.unlock(); - } + runnable.getLocks().unlockAll(); + runnable.getLocks().release(); } runnable.after(); } diff --git a/event-loop/src/main/java/mc/core/events/runner/ResourceRunnable.java b/event-loop/src/main/java/mc/core/events/runner/ResourceRunnable.java index 3a7c54e..6bf3492 100644 --- a/event-loop/src/main/java/mc/core/events/runner/ResourceRunnable.java +++ b/event-loop/src/main/java/mc/core/events/runner/ResourceRunnable.java @@ -1,12 +1,10 @@ package mc.core.events.runner; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.locks.Lock; +import mc.core.events.lock.LockObserveList; public interface ResourceRunnable extends Runnable { - default List getLocks() { - return Collections.emptyList(); + default LockObserveList getLocks() { + return LockObserveList.EMPTY_LIST; } default void after() {