温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何正确关闭Java ExecutorService

发布时间:2025-07-03 17:19:03 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

要正确关闭Java ExecutorService,您需要遵循以下步骤:

  1. 首先,尽量优雅地关闭ExecutorService,不再接受新的任务,但会等待已经提交的任务完成。这可以通过调用shutdown()方法来实现:
executorService.shutdown();
  1. 等待已经提交的任务完成。您可以使用shutdownNow()和awaitTermination()方法来实现:
// 尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。
List<Runnable> remainingTasks = executorService.shutdownNow();

// 等待所有任务完成执行,设置等待时间。
boolean isTerminated = executorService.awaitTermination(60, TimeUnit.SECONDS);

shutdownNow()方法尝试停止所有正在执行的任务,并返回等待执行的任务列表。awaitTermination()方法会阻塞,直到所有任务完成执行或者超时发生。

  1. 检查ExecutorService是否已经终止。如果超时时间内所有任务都完成了,isTerminated将为true。否则,您可以根据需要采取进一步的措施,例如记录日志或者强制关闭进程。
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,如果在指定时间内没有完成,则尝试强制关闭。如果强制关闭后仍然没有完成,会输出错误信息。同时,如果在等待过程中线程被中断,会保留中断状态。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI