Archived
0

Migrated ResourceRunnable to use PoorMansLock

This commit is contained in:
Daniil
2018-08-05 13:46:00 +07:00
parent 6ab8658399
commit 147b2ff28d
4 changed files with 24 additions and 19 deletions

View File

@@ -5,13 +5,12 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import mc.core.events.api.EventQueueOwner; import mc.core.events.api.EventQueueOwner;
import mc.core.events.lock.LockObserveList;
import mc.core.events.runner.EventExecutorService; import mc.core.events.runner.EventExecutorService;
import mc.core.events.runner.ResourceRunnable; import mc.core.events.runner.ResourceRunnable;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.locks.Lock;
@RequiredArgsConstructor @RequiredArgsConstructor
@Getter @Getter
@@ -41,7 +40,7 @@ public class EventPipelineTask {
RegisteredEventHandler handler = handlers.get(currentIndex); RegisteredEventHandler handler = handlers.get(currentIndex);
if (!event.isCanceled() || !handler.isIgnoreCancelled()) { if (!event.isCanceled() || !handler.isIgnoreCancelled()) {
List<Lock> locks = getLocks(handler); LockObserveList locks = getLocks(handler);
service.addTask(new ResourceRunnable() { service.addTask(new ResourceRunnable() {
@Override @Override
@@ -60,7 +59,7 @@ public class EventPipelineTask {
} }
@Override @Override
public List<Lock> getLocks() { public LockObserveList getLocks() {
return locks; return locks;
} }
}); });
@@ -70,12 +69,14 @@ public class EventPipelineTask {
} }
} }
private List<Lock> getLocks(RegisteredEventHandler handler) { private LockObserveList getLocks(RegisteredEventHandler handler) {
List<Lock> locks = new ArrayList<>(); LockObserveList locks = new LockObserveList();
/*
if (handler.isPluginSynchronize()) if (handler.isPluginSynchronize())
locks.add(manager.getResourceManager().getPluginLock(handler.getPlugin())); locks.add(manager.getResourceManager().getPluginLock(handler.getPlugin()));
*/
return locks; return locks;
} }

View File

@@ -5,6 +5,7 @@ import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
public class LockObserveList implements Consumer<PoorMansLock> { public class LockObserveList implements Consumer<PoorMansLock> {
public static LockObserveList EMPTY_LIST = new LockObserveList();
private List<PoorMansLock> locks = new ArrayList<>(); private List<PoorMansLock> locks = new ArrayList<>();
private Runnable callback; private Runnable callback;
@@ -32,6 +33,16 @@ public class LockObserveList implements Consumer<PoorMansLock> {
return true; return true;
} }
public void lockAll() {
for (PoorMansLock lock : locks)
lock.lock();
}
public void unlockAll() {
for (PoorMansLock lock : locks)
lock.unlock();
}
@Override @Override
public void accept(PoorMansLock lock) { public void accept(PoorMansLock lock) {
if (!lock.isLocked()) { if (!lock.isLocked()) {

View File

@@ -1,7 +1,5 @@
package mc.core.events.runner; package mc.core.events.runner;
import java.util.concurrent.locks.Lock;
public class ExecutorThread extends Thread { public class ExecutorThread extends Thread {
private EventExecutorService service; private EventExecutorService service;
@@ -25,15 +23,12 @@ public class ExecutorThread extends Thread {
} }
void executeTask(ResourceRunnable runnable) { void executeTask(ResourceRunnable runnable) {
for (Lock lock : runnable.getLocks()) { runnable.getLocks().lockAll();
lock.lock();
}
try { try {
runnable.run(); runnable.run();
} finally { } finally {
for (Lock lock : runnable.getLocks()) { runnable.getLocks().unlockAll();
lock.unlock(); runnable.getLocks().release();
}
} }
runnable.after(); runnable.after();
} }

View File

@@ -1,12 +1,10 @@
package mc.core.events.runner; package mc.core.events.runner;
import java.util.Collections; import mc.core.events.lock.LockObserveList;
import java.util.List;
import java.util.concurrent.locks.Lock;
public interface ResourceRunnable extends Runnable { public interface ResourceRunnable extends Runnable {
default List<Lock> getLocks() { default LockObserveList getLocks() {
return Collections.emptyList(); return LockObserveList.EMPTY_LIST;
} }
default void after() { default void after() {