diff --git a/src/main/java/de/extio/game_engine/event/EventExecutor.java b/src/main/java/de/extio/game_engine/event/EventExecutor.java index dbf2acd..94e2ab4 100644 --- a/src/main/java/de/extio/game_engine/event/EventExecutor.java +++ b/src/main/java/de/extio/game_engine/event/EventExecutor.java @@ -12,15 +12,16 @@ import java.util.function.Consumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; -public class EventExecutor { +public class EventExecutor implements DisposableBean { private static final Logger LOGGER = LoggerFactory.getLogger(EventExecutor.class); - private static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor(); + + private final ExecutorService executor = Executors.newFixedThreadPool(4); //Executors.newVirtualThreadPerTaskExecutor(); private final BlockingQueue eventQueue = new LinkedBlockingQueue<>(); - @SuppressWarnings("unused") private final Thread processorThread; private final EventHandlerRegistry registry; @@ -44,6 +45,12 @@ public class EventExecutor { } }); } + + @Override + public void destroy() throws Exception { + this.processorThread.interrupt(); + this.executor.shutdownNow(); + } public void submit(final Event event) { this.eventQueue.offer(new QueuedEvent(event.getClass(), event)); @@ -79,7 +86,7 @@ public class EventExecutor { }); } try { - for (final var future : EXECUTOR.invokeAll(tasks)) { + for (final var future : executor.invokeAll(tasks)) { try { future.get(); } diff --git a/src/main/java/de/extio/game_engine/module/ModuleExecutorImpl.java b/src/main/java/de/extio/game_engine/module/ModuleExecutorImpl.java index b961a7b..e1e320c 100644 --- a/src/main/java/de/extio/game_engine/module/ModuleExecutorImpl.java +++ b/src/main/java/de/extio/game_engine/module/ModuleExecutorImpl.java @@ -10,17 +10,24 @@ import java.util.function.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; -public class ModuleExecutorImpl implements ModuleExecutor { +public class ModuleExecutorImpl implements ModuleExecutor, DisposableBean { private static final Logger LOGGER = LoggerFactory.getLogger(ModuleExecutorImpl.class); - private static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor(); + + private final ExecutorService executor = Executors.newFixedThreadPool(4); // Executors.newVirtualThreadPerTaskExecutor(); private final ModuleService moduleManager; public ModuleExecutorImpl(final ModuleService moduleManager) { this.moduleManager = moduleManager; } + + @Override + public void destroy() throws Exception { + this.executor.shutdownNow(); + } @Override public void execute() { @@ -72,7 +79,7 @@ public class ModuleExecutorImpl implements ModuleExecutor { } try { - EXECUTOR.invokeAll(tasks); + executor.invokeAll(tasks); } catch (final InterruptedException e) { Thread.currentThread().interrupt();