From 2d2eda80694613d5735b819035a4885148d2ab51 Mon Sep 17 00:00:00 2001 From: hayanesuru Date: Thu, 8 May 2025 17:14:33 +0900 Subject: [PATCH] defer init tracker thread pool --- .../async/tracker/MultithreadedTracker.java | 30 ++++++++++++------- .../modules/async/MultithreadedTracker.java | 3 ++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java b/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java index 7880c0a8..d5f6a6e8 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java @@ -23,20 +23,28 @@ public class MultithreadedTracker { private static final String THREAD_PREFIX = "Leaf Async Tracker"; private static final Logger LOGGER = LogManager.getLogger(THREAD_PREFIX); private static long lastWarnMillis = System.currentTimeMillis(); - private static final ThreadPoolExecutor trackerExecutor = new ThreadPoolExecutor( - getCorePoolSize(), - getMaxPoolSize(), - getKeepAliveTime(), TimeUnit.SECONDS, - getQueueImpl(), - getThreadFactory(), - getRejectedPolicy() - ); + private static ThreadPoolExecutor TRACKER_EXECUTOR = null; private MultithreadedTracker() { } + public static void init() { + if (TRACKER_EXECUTOR == null) { + TRACKER_EXECUTOR = new ThreadPoolExecutor( + getCorePoolSize(), + getMaxPoolSize(), + getKeepAliveTime(), TimeUnit.SECONDS, + getQueueImpl(), + getThreadFactory(), + getRejectedPolicy() + ); + } else { + throw new IllegalStateException(); + } + } + public static Executor getTrackerExecutor() { - return trackerExecutor; + return TRACKER_EXECUTOR; } public static void tick(ChunkSystemServerLevel level) { @@ -59,7 +67,7 @@ public class MultithreadedTracker { final Entity[] trackerEntitiesRaw = trackerEntities.getRawDataUnchecked(); // Move tracking to off-main - trackerExecutor.execute(() -> { + TRACKER_EXECUTOR.execute(() -> { for (final Entity entity : trackerEntitiesRaw) { if (entity == null) continue; @@ -97,7 +105,7 @@ public class MultithreadedTracker { } // batch submit tasks - trackerExecutor.execute(() -> { + TRACKER_EXECUTOR.execute(() -> { for (final Runnable sendChanges : sendChangesTasks) { if (sendChanges == null) continue; diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/MultithreadedTracker.java b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/MultithreadedTracker.java index a6b42058..7a01b4b1 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/MultithreadedTracker.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/MultithreadedTracker.java @@ -57,5 +57,8 @@ public class MultithreadedTracker extends ConfigModules { if (asyncEntityTrackerQueueSize <= 0) asyncEntityTrackerQueueSize = asyncEntityTrackerMaxThreads * 384; + if (enabled) { + org.dreeam.leaf.async.tracker.MultithreadedTracker.init(); + } } }