以下是一个通用的线程池工具类,可以基于 Java 8 的 CompletableFuture 来实现:\n\njava\nimport java.util.concurrent.*;\n\npublic class ThreadPoolUtils {\n private static final int DEFAULT_POOL_SIZE = Runtime.getRuntime().availableProcessors();\n private static final int DEFAULT_MAX_POOL_SIZE = 1000;\n private static final int DEFAULT_KEEP_ALIVE_TIME = 60;\n private static final TimeUnit DEFAULT_TIME_UNIT = TimeUnit.SECONDS;\n private static final BlockingQueue<Runnable> DEFAULT_WORK_QUEUE = new LinkedBlockingQueue<>();\n private static final RejectedExecutionHandler DEFAULT_REJECTED_HANDLER = new ThreadPoolExecutor.AbortPolicy();\n\n private static ThreadPoolExecutor executor;\n\n private ThreadPoolUtils() {\n }\n\n public static void init() {\n executor = new ThreadPoolExecutor(DEFAULT_POOL_SIZE, DEFAULT_MAX_POOL_SIZE, DEFAULT_KEEP_ALIVE_TIME, DEFAULT_TIME_UNIT, DEFAULT_WORK_QUEUE, DEFAULT_REJECTED_HANDLER);\n }\n\n public static CompletableFuture<Void> runAsync(Runnable task) {\n return CompletableFuture.runAsync(task, executor);\n }\n\n public static <T> CompletableFuture<T> supplyAsync(Supplier<T> task) {\n return CompletableFuture.supplyAsync(task, executor);\n }\n\n public static void shutdown() {\n executor.shutdown();\n }\n}\n\n\n使用示例:\n\njava\nimport java.util.concurrent.CompletableFuture;\n\npublic class Main {\n public static void main(String[] args) {\n ThreadPoolUtils.init();\n\n // 执行异步任务\n CompletableFuture<Void> future1 = ThreadPoolUtils.runAsync(() -> {\n // 异步任务1\n System.out.println("异步任务1开始执行");\n try {\n Thread.sleep(1000);\n } catch (InterruptedException e) {\n e.printStackTrace();\n }\n System.out.println("异步任务1执行完毕");\n });\n\n CompletableFuture<String> future2 = ThreadPoolUtils.supplyAsync(() -> {\n // 异步任务2\n System.out.println("异步任务2开始执行");\n try {\n Thread.sleep(2000);\n } catch (InterruptedException e) {\n e.printStackTrace();\n }\n System.out.println("异步任务2执行完毕");\n return "Result";\n });\n\n // 等待异步任务完成\n future1.join();\n String result = future2.join();\n System.out.println("异步任务2的结果:" + result);\n\n ThreadPoolUtils.shutdown();\n }\n}\n\n\n在 init() 方法中初始化线程池,并提供了 runAsync() 和 supplyAsync() 方法来执行异步任务。 shutdown() 方法用于关闭线程池。


原文地址: https://www.cveoy.top/t/topic/p25L 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录