9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-25 09:59:15 +00:00

Add timeout to AsyncPlayerDataSaving (#275)

* Add timeout to AsyncPlayerDataSaving

* dump thread if failed to save playerdata

* PlayerDataStorage#lockFor break loop after cancel
This commit is contained in:
hayanesuru
2025-03-31 23:34:44 +08:00
committed by GitHub
parent 8e11af1228
commit f1a31d88c8
3 changed files with 102 additions and 81 deletions

View File

@@ -2,15 +2,13 @@ package org.dreeam.leaf.async;
import org.dreeam.leaf.config.modules.async.AsyncPlayerDataSave;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.Optional;
import java.util.concurrent.*;
public class AsyncPlayerDataSaving {
public static final ExecutorService IO_POOL = new ThreadPoolExecutor(
1, 1, 0, TimeUnit.MILLISECONDS,
1, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(),
new com.google.common.util.concurrent.ThreadFactoryBuilder()
.setPriority(Thread.NORM_PRIORITY - 2)
@@ -23,11 +21,12 @@ public class AsyncPlayerDataSaving {
private AsyncPlayerDataSaving() {
}
public static void save(Runnable runnable) {
public static Optional<Future<?>> submit(Runnable runnable) {
if (!AsyncPlayerDataSave.enabled) {
runnable.run();
return Optional.empty();
} else {
IO_POOL.execute(runnable);
return Optional.of(IO_POOL.submit(runnable));
}
}
}