9
0
mirror of https://github.com/BX-Team/DivineMC.git synced 2025-12-22 08:19:19 +00:00

finish this

This commit is contained in:
NONPLAYT
2025-10-11 16:20:06 +03:00
parent f5f9285e73
commit 7b9e2e61e4
38 changed files with 820 additions and 3161 deletions

View File

@@ -1,82 +0,0 @@
package org.bxteam.divinemc.async;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import net.minecraft.server.MinecraftServer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bxteam.divinemc.config.DivineConfig;
import org.bxteam.divinemc.spark.ThreadDumperRegistry;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Supplier;
public class AsyncJoinHandler {
private static final String THREAD_PREFIX = "Async Join Thread";
public static final Logger LOGGER = LogManager.getLogger(AsyncJoinHandler.class.getSimpleName());
public static ExecutorService JOIN_EXECUTOR;
private static boolean enabled = false;
public static void init(boolean enabled, int threadCount) {
AsyncJoinHandler.enabled = enabled;
if (enabled) {
if (JOIN_EXECUTOR != null) {
JOIN_EXECUTOR.shutdown();
}
JOIN_EXECUTOR = org.bxteam.divinemc.config.DivineConfig.PerformanceCategory.virtualThreadsEnabled &&
DivineConfig.AsyncCategory.asyncJoinUseVirtualThreads
? Executors.newVirtualThreadPerTaskExecutor()
: Executors.newFixedThreadPool(
threadCount,
new ThreadFactoryBuilder()
.setNameFormat(THREAD_PREFIX)
.setDaemon(true)
.build()
);
ThreadDumperRegistry.REGISTRY.add(THREAD_PREFIX);
LOGGER.info("Initialized AsyncJoinHandler with {} threads", threadCount);
}
}
public static <T> void runAsync(Supplier<T> task, java.util.function.Consumer<T> callback) {
if (!enabled || JOIN_EXECUTOR == null) {
T result = task.get();
callback.accept(result);
return;
}
CompletableFuture.supplyAsync(task, JOIN_EXECUTOR)
.thenAccept(result -> {
MinecraftServer.getServer().execute(() -> callback.accept(result));
})
.exceptionally(ex -> {
LOGGER.error("Error during async join operation", ex);
return null;
});
}
public static void runAsync(Runnable asyncTask) {
if (!enabled || JOIN_EXECUTOR == null) {
asyncTask.run();
return;
}
CompletableFuture.runAsync(asyncTask, JOIN_EXECUTOR)
.thenRun(() -> MinecraftServer.getServer().execute(asyncTask))
.exceptionally(ex -> {
LOGGER.error("Error during async join operation", ex);
return null;
});
}
public static Executor getExecutor() {
return enabled && JOIN_EXECUTOR != null ? JOIN_EXECUTOR : Runnable::run;
}
}

View File

@@ -58,14 +58,5 @@ public class ExecutorShutdown {
AsyncPathProcessor.PATH_PROCESSING_EXECUTOR.awaitTermination(10L, TimeUnit.SECONDS);
} catch (InterruptedException ignored) { }
}
if (AsyncJoinHandler.JOIN_EXECUTOR != null) {
LOGGER.info("Shutting down async join executor...");
AsyncJoinHandler.JOIN_EXECUTOR.shutdown();
try {
AsyncJoinHandler.JOIN_EXECUTOR.awaitTermination(10L, TimeUnit.SECONDS);
} catch (InterruptedException ignored) { }
}
}
}