首頁  >  文章  >  Java  >  Java ExecutorService關閉時如何確保任務終止?

Java ExecutorService關閉時如何確保任務終止?

Barbara Streisand
Barbara Streisand原創
2024-10-24 07:39:02900瀏覽

How to Ensure the Termination of Tasks When Shutting Down a Java ExecutorService?

ExecutorService 關閉終止策略

問題:

關閉 Java 時如何確保正在執行的任務終止任務?

答案:

ExecutorService 的Oracle API 文件建議使用以下方法:

<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown(); // Disable new tasks
   try {
     // Wait for existing tasks
     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow(); // Cancel executing tasks
       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: 阻塞,直到所有任務完成或發生逾時或中斷。

<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
增強的終止等待:

<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
如果池需要更多時間關閉,您可以將:

更改為: 這將繼續無限期地等待,直到終止。

以上是Java ExecutorService關閉時如何確保任務終止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn