Java線程池提供了一種優雅地停止正在執行的任務的方法,可以通過調用shutdown()
方法來停止線程池的執行,并等待所有已提交的任務執行完成。具體步驟如下:
shutdown()
方法來停止線程池的執行。ExecutorService executor = Executors.newFixedThreadPool(10);
executor.shutdown();
awaitTermination()
方法來等待所有已提交的任務執行完成,或者指定一個超時時間。try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果超時,強制停止所有正在執行的任務
}
} catch (InterruptedException e) {
executor.shutdownNow(); // 如果發生異常,強制停止所有正在執行的任務
}
在調用awaitTermination()
方法時,可以指定一個超時時間,如果超過了指定的時間,但仍有任務未執行完成,則返回false。此時,可以調用shutdownNow()
方法來強制停止所有正在執行的任務。
isShutdown()
和isTerminated()
方法。Runnable task = new Runnable() {
public void run() {
// 執行任務邏輯
if (executor.isShutdown() && !executor.isTerminated()) {
// 執行清理操作
}
}
};
注意,調用shutdown()
方法只會停止線程池接受新的任務,并不會停止已經提交的任務的執行。要停止正在執行的任務,需要配合awaitTermination()
和shutdownNow()
方法使用。