mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
1. Wet the drys 2. Dry the wets 3. Wet the drys 4. Dry the wets 5. Wet the drys 6. Now dust the wets
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
|