確保正確關閉 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>
摘要:>
以上是如何確保Java ExecutorServiceExecutors正確關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!