package top.r3944realms.docchecktoolrefactored; import java.util.Map; import java.util.concurrent.*; public class ThreadPoolManager { private static final Map pools = new ConcurrentHashMap<>(); public static ExecutorService createPool(String name, int size) { return createPool(name, size, true); // 默认使用守护线程 } public static ExecutorService createPool(String name, int size, boolean daemon) { ThreadFactory factory = daemon ? r -> { Thread t = new Thread(r, name + "-thread"); t.setDaemon(true); return t; } : r -> new Thread(r, name + "-thread"); ExecutorService pool = Executors.newFixedThreadPool(size, factory); pools.put(name, pool); return pool; } public static void shutdownAll() { pools.forEach((name, pool) -> { if (!pool.isShutdown()) { try { pool.shutdown(); if (!pool.awaitTermination(5, TimeUnit.SECONDS)) { pool.shutdownNow(); } } catch (InterruptedException e) { pool.shutdownNow(); Thread.currentThread().interrupt(); } } }); pools.clear(); } }