首頁 > Java > java教程 > 如何確保Java ExecutorServiceExecutors正確關閉?

如何確保Java ExecutorServiceExecutors正確關閉?

Susan Sarandon
發布: 2024-10-24 07:32:30
原創
788 人瀏覽過

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板