在 Java 中,ExecutorService 不能直接“停止”,需要通过优雅关闭或强制关闭的方式来释放线程资源。常见做法如下:
让已提交的任务执行完,不再接收新任务。
executorService.shutdown();
特点:
executorService.shutdown();
try {
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
// 超时后仍未结束
executorService.shutdownNow();
}
} catch (InterruptedException e) {
executorService.shutdownNow();
Thread.currentThread().interrupt();
}
尝试中断所有任务。
List<Runnable> unfinished = executorService.shutdownNow();
特点:
Thread.interrupt())ExecutorService executor = Executors.newFixedThreadPool(4);
// 提交任务
executor.execute(() -> { /* 任务 */ });
// 关闭
executor.shutdown();
try {
if (!executor.awaitTermination(30, TimeUnit.SECONDS)) {
executor.shutdownNow();
if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
System.err.println("线程池未完全关闭");
}
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
InterruptedExceptiontry-finally 或 Spring 的 @PreDestroy 保证关闭如果你使用的是:
ThreadPoolExecutorThreadPoolTaskExecutorScheduledExecutorService我可以给你对应的关闭方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。