優雅地關閉 Java ExecutorService
執行器是在 Java 應用程式中同時管理和執行任務的便捷方法。但是,不正確的關閉可能會導致意外行為或效能問題。本指南詳細說明如何正確關閉 ExecutorService,確保所有任務都終止或取消。
了解ExecutorService 關閉
ExecutorService 提供兩種主要關閉方法:
它是需要注意的是,關閉並不能保證終止所有任務。無法回應中斷或具有長時間運行操作的任務可能會保持活動狀態。
建議的關閉過程
Oracle 文件建議使用以下方法來正常關閉:
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();
}
}
此方法可確保允許完成現有任務,同時防止新的提交。如果關閉過程花費的時間比預期長,您可以將
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
替換為
while (!pool.awaitTermination(60, TimeUnit.SECONDS))
繼續等待任務
關閉方法總結
:阻塞,直到所有任務完成、逾時或目前執行緒中斷。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3