Javaのスレッドプールで実行中のタスクを停止する方法は何ですか?
Javaのスレッドプールは、実行中のタスクを優雅に停止する方法を提供しており、shutdown()メソッドを呼び出すことでスレッドプールの実行を停止し、すべての送信されたタスクが完了するのを待つことができます。具体的な手順は以下の通りです:
- シャットダウン()
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.shutdown();
- 終了を待つ
try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 如果超时,强制停止所有正在执行的任务
}
} catch (InterruptedException e) {
executor.shutdownNow(); // 如果发生异常,强制停止所有正在执行的任务
}
awaitTermination()メソッドを呼び出す際に、タイムアウト時間を指定することができます。指定された時間を超えても、まだタスクが完了していない場合にはfalseが返されます。その場合、shutdownNow()メソッドを呼び出して、すべての実行中のタスクを強制停止することができます。
- シャットダウンされましたか?
- 終了していますか?
Runnable task = new Runnable() {
public void run() {
// 执行任务逻辑
if (executor.isShutdown() && !executor.isTerminated()) {
// 执行清理操作
}
}
};
shutdown() メソッドを呼び出すと、スレッドプールが新しいタスクの受け入れを停止しますが、すでに提出されたタスクの実行を停止しません。実行中のタスクを停止するには、awaitTermination() メソッドと shutdownNow() メソッドを併用する必要があります。