要正确关闭Java ExecutorService,您需要遵循以下步骤:
executorService.shutdown();
// 尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。
List<Runnable> remainingTasks = executorService.shutdownNow();
// 等待所有任务完成执行,设置等待时间。
boolean isTerminated = executorService.awaitTermination(60, TimeUnit.SECONDS);
shutdownNow()方法尝试停止所有正在执行的任务,并返回等待执行的任务列表。awaitTermination()方法会阻塞,直到所有任务完成执行或者超时发生。
if (!isTerminated) {
System.err.println("ExecutorService没有在指定时间内终止");
// 根据需要采取进一步措施,例如记录日志或者强制关闭进程。
}
将这些步骤组合在一起,您可以优雅地关闭Java ExecutorService:
executorService.shutdown();
try {
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
executorService.shutdownNow();
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
System.err.println("ExecutorService没有在指定时间内终止");
}
}
} catch (InterruptedException e) {
executorService.shutdownNow();
Thread.currentThread().interrupt(); // 保留中断状态
}
这段代码首先尝试优雅地关闭ExecutorService,如果在指定时间内没有完成,则尝试强制关闭。如果强制关闭后仍然没有完成,会输出错误信息。同时,如果在等待过程中线程被中断,会保留中断状态。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。