From 3d33230e2592612c2d34ac1d3ef4481a0792004f Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sat, 26 Dec 2020 21:22:04 +0800 Subject: [PATCH] fix: RejectedExecutionException --- .../org/jackhuang/hmcl/game/GameVersion.java | 21 ------------------- .../org/jackhuang/hmcl/task/FetchTask.java | 12 +++-------- .../org/jackhuang/hmcl/task/Schedulers.java | 10 +++------ .../java/org/jackhuang/hmcl/util/Lang.java | 4 ++-- 4 files changed, 8 insertions(+), 39 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java index 7e9eddf21..d4ebff777 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.game; import com.google.gson.JsonParseException; -import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; @@ -114,24 +113,4 @@ public final class GameVersion { return Optional.empty(); } } - - private static final class MinecraftVersion { - public String name; - - @SerializedName("release_target") - public String releaseTarget; - - public String id; - - public boolean stable; - - @SerializedName("world_version") - public int worldVersion; - - @SerializedName("protocol_version") - public int protocolVersion; - - @SerializedName("pack_version") - public int packVersion; - } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java index ab82f9ca5..7f875c09e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java @@ -38,6 +38,8 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; +import static org.jackhuang.hmcl.util.Lang.threadPool; + public abstract class FetchTask extends Task { protected final List urls; protected final int retry; @@ -278,15 +280,7 @@ public abstract class FetchTask extends Task { if (DOWNLOAD_EXECUTOR == null) { synchronized (Schedulers.class) { if (DOWNLOAD_EXECUTOR == null) { - ThreadPoolExecutor executor = new ThreadPoolExecutor(downloadExecutorConcurrency, downloadExecutorConcurrency, 10, TimeUnit.SECONDS, - new ArrayBlockingQueue<>(downloadExecutorConcurrency), - runnable -> { - Thread thread = Executors.defaultThreadFactory().newThread(runnable); - thread.setDaemon(true); - return thread; - }); - executor.allowCoreThreadTimeOut(true); - DOWNLOAD_EXECUTOR = executor; + DOWNLOAD_EXECUTOR = threadPool("Download", true, downloadExecutorConcurrency, 10, TimeUnit.SECONDS); } } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java index 7c816a546..9735df3d1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java @@ -23,6 +23,8 @@ import org.jackhuang.hmcl.util.Logging; import javax.swing.*; import java.util.concurrent.*; +import static org.jackhuang.hmcl.util.Lang.threadPool; + /** * * @author huangyuhui @@ -47,13 +49,7 @@ public final class Schedulers { if (IO_EXECUTOR == null) { synchronized (Schedulers.class) { if (IO_EXECUTOR == null) { - IO_EXECUTOR = new ThreadPoolExecutor(0, 4, 10, TimeUnit.SECONDS, - new LinkedBlockingQueue<>(), - runnable -> { - Thread thread = Executors.defaultThreadFactory().newThread(runnable); - thread.setDaemon(true); - return thread; - }); + IO_EXECUTOR = threadPool("IO", true, 4, 10, TimeUnit.SECONDS); } } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java index 16d552f41..748983c5b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java @@ -202,12 +202,12 @@ public final class Lang { public static ThreadPoolExecutor threadPool(String name, boolean daemon, int threads, long timeout, TimeUnit timeunit) { AtomicInteger counter = new AtomicInteger(1); - ThreadPoolExecutor pool = new ThreadPoolExecutor(0, threads, timeout, timeunit, new LinkedBlockingQueue<>(), r -> { + ThreadPoolExecutor pool = new ThreadPoolExecutor(threads, threads, timeout, timeunit, new LinkedBlockingQueue<>(), r -> { Thread t = new Thread(r, name + "-" + counter.getAndIncrement()); t.setDaemon(daemon); return t; }); - pool.allowsCoreThreadTimeOut(); + pool.allowCoreThreadTimeOut(true); return pool; }