优雅地关闭 Java ExecutorService
Executor 是在 Java 应用程序中并发管理和执行任务的便捷方法。但是,不正确的关闭可能会导致意外行为或性能问题。本指南详细说明了如何正确关闭 ExecutorService,确保所有任务都终止或取消。
了解 ExecutorService 关闭
ExecutorService 提供两种主要关闭方法:
需要注意的是,关闭并不能保证终止所有任务。无法响应中断或具有长时间运行操作的任务可能会保持活动状态。
建议的关闭过程
Oracle 文档建议使用以下方法来正常关闭:
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for tasks to respond to cancellation if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
此方法可确保允许完成现有任务,同时防止新的提交。如果关机过程花费的时间比预期时间长,您可以将
<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
替换为
<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
继续等待任务完成。
关机摘要方法
以上是如何正确关闭 Java ExecutorService 执行器?的详细内容。更多信息请关注PHP中文网其他相关文章!