mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
* backport: 1.21.8 async mob spawn * Move into patch * fix * fix build --------- Co-authored-by: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Co-authored-by: hayanesuru <hayanesuru@outlook.jp>
57 lines
2.9 KiB
Diff
57 lines
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: nostalfinals <yuu8583@proton.me>
|
|
Date: Tue, 12 Mar 2024 00:36:29 +0800
|
|
Subject: [PATCH] Virtual Thread for async scheduler
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java
|
|
index 0ca279fb71d39c81b1f608e0ee9ba3e498d55fa3..1aaccc688d246201db141a0d5e2c68d0dd4069b2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java
|
|
@@ -38,17 +38,40 @@ import java.util.concurrent.TimeUnit;
|
|
|
|
public class CraftAsyncScheduler extends CraftScheduler {
|
|
|
|
- private final ThreadPoolExecutor executor = new ThreadPoolExecutor(
|
|
- 4, Integer.MAX_VALUE,30L, TimeUnit.SECONDS, new SynchronousQueue<>(),
|
|
- new ThreadFactoryBuilder().setNameFormat("Craft Scheduler Thread - %1$d").build());
|
|
+ private final org.apache.logging.log4j.Logger LOGGER = org.apache.logging.log4j.LogManager.getLogger(getClass().getName()); // Leaf - Class logger
|
|
+ private final Executor executor; // Leaf - use super class
|
|
private final Executor management = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder()
|
|
.setNameFormat("Craft Async Scheduler Management Thread").build());
|
|
private final List<CraftTask> temp = new ArrayList<>();
|
|
|
|
CraftAsyncScheduler() {
|
|
super(true);
|
|
- executor.allowCoreThreadTimeOut(true);
|
|
- executor.prestartAllCoreThreads();
|
|
+
|
|
+ // Leaf start - Ability to use Virtual Thread for async scheduler
|
|
+ if (org.dreeam.leaf.config.modules.opt.VT4BukkitScheduler.enabled) {
|
|
+ executor = new ThreadPoolExecutor(
|
|
+ 0, Integer.MAX_VALUE, 10L, TimeUnit.SECONDS, new SynchronousQueue<>(), // Use 10s for keepalive time
|
|
+ Thread.ofVirtual()
|
|
+ .name("Craft Scheduler Thread - ", 0)
|
|
+ .uncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER))
|
|
+ .factory()
|
|
+ );
|
|
+
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ executor = new ThreadPoolExecutor(
|
|
+ 4, Integer.MAX_VALUE, 30L, TimeUnit.SECONDS, new SynchronousQueue<>(),
|
|
+ new ThreadFactoryBuilder()
|
|
+ .setNameFormat("Craft Scheduler Thread - %1$d")
|
|
+ .setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER))
|
|
+ .build());
|
|
+
|
|
+ var threadPoolExecutor = (ThreadPoolExecutor) executor;
|
|
+
|
|
+ threadPoolExecutor.allowCoreThreadTimeOut(true);
|
|
+ threadPoolExecutor.prestartAllCoreThreads();
|
|
+ // Leaf end - Ability to use Virtual Thread for async scheduler
|
|
}
|
|
|
|
@Override
|