From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: wangxyper Date: Sat, 28 Jan 2023 12:51:08 +0800 Subject: [PATCH] MikuServer: Add shutdown hook to async executor and refactor thread id counter Original license: MIT Original project: https://github.com/MikuMC/MikuServer diff --git a/src/main/java/co/mikumc/mikuserver/PublicConstants.java b/src/main/java/co/mikumc/mikuserver/PublicConstants.java index c6da0ce6b7181d3fb9b6ea8c2a600741d92e8f18..3f2e2e2be1d53b9257f99fb19a50491efc629925 100644 --- a/src/main/java/co/mikumc/mikuserver/PublicConstants.java +++ b/src/main/java/co/mikumc/mikuserver/PublicConstants.java @@ -8,17 +8,22 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class PublicConstants { - public static final AtomicInteger threadId = new AtomicInteger(); + private static final AtomicInteger asyncWorkerThreadIdCounter = new AtomicInteger(); public static final CallbackExecutor asyncExecutor = new CallbackExecutor( Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors(), 50, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), - task -> { - AnotherTickThread worker = new AnotherTickThread(task,"MikuServer-Async-Worker # "+threadId.getAndIncrement()); - worker.setDaemon(true); - return worker; - } + task -> new AnotherTickThread(task,"MikuServer-Async-Worker # "+ asyncWorkerThreadIdCounter.getAndIncrement()) ); + + static { + Runtime.getRuntime().addShutdownHook(new Thread(()->{ + if (asyncExecutor.isSubmittingStarted()){ + asyncExecutor.stopSubmitting(); + } + asyncExecutor.shutdownNow(); + })); + } } diff --git a/src/main/java/co/mikumc/mikuserver/utils/AnotherTickThread.java b/src/main/java/co/mikumc/mikuserver/utils/AnotherTickThread.java index 8dd4423fb1477c901e88c07537ca736eb4f9a8cc..b3ea36c67e9eb5dafd1c7ff5abdf1233dfbd562b 100644 --- a/src/main/java/co/mikumc/mikuserver/utils/AnotherTickThread.java +++ b/src/main/java/co/mikumc/mikuserver/utils/AnotherTickThread.java @@ -9,5 +9,6 @@ public class AnotherTickThread extends TickThread { public AnotherTickThread(Runnable run, String name) { super(run, name); + this.setPriority(Thread.NORM_PRIORITY - 2); } }