首页 >Java >java教程 >如何确保Java ExecutorServiceExecutors正确关闭?

如何确保Java ExecutorServiceExecutors正确关闭?

Susan Sarandon
Susan Sarandon原创
2024-10-24 07:32:30788浏览

How to Ensure Proper Shutdown of Java ExecutorServiceExecutors?

确保正确关闭 Java ExecutorService

Java 中的执行器提供了一种管理异步任务的便捷方法。然而,关闭执行器可能会带来挑战,特别是在处理长时间运行或无响应的任务时。

问题:

考虑代码片段:

<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor();
// ... create and submit tasks
exec.shutdownNow();</code>

所有任务完成后,exec.isTermminate() 仍然为 false,表明某些任务可能没有正确终止。

解决方案:

Oracle 推荐method 是 shutdownAndAwaitTermination 方法:

<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown();
   try {
     // Wait for existing tasks to terminate (up to 60 seconds)
     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow();
       // Wait for cancelled tasks to respond (up to 60 seconds)
       if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
           System.err.println("Pool did not terminate");
       }
     }
   } catch (InterruptedException ie) {
     pool.shutdownNow();
     Thread.currentThread().interrupt();
   }
}</code>

关闭方法摘要:

  • shutdown(): 禁用新任务提交,但允许当前任务执行。
  • shutdownNow(): 尝试强制终止所有正在执行和等待的任务。
  • awaitTermination(long timeout, TimeUnit unit) throws InterruptedException: 阻塞,直到所有任务完成、超时或线程被中断。

通过利用适当的关闭方法,您可以确保您的 ExecutorService 正确终止,释放资源并确保彻底关闭。

以上是如何确保Java ExecutorServiceExecutors正确关闭?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn