Javaのスレッドプールで実行中のタスクを停止する方法は何ですか?

Javaのスレッドプールは、実行中のタスクを優雅に停止する方法を提供しており、shutdown()メソッドを呼び出すことでスレッドプールの実行を停止し、すべての送信されたタスクが完了するのを待つことができます。具体的な手順は以下の通りです:

  1. シャットダウン()
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.shutdown();
  1. 終了を待つ
try {
    if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
        executor.shutdownNow(); // 如果超时,强制停止所有正在执行的任务
    }
} catch (InterruptedException e) {
    executor.shutdownNow(); // 如果发生异常,强制停止所有正在执行的任务
}

awaitTermination()メソッドを呼び出す際に、タイムアウト時間を指定することができます。指定された時間を超えても、まだタスクが完了していない場合にはfalseが返されます。その場合、shutdownNow()メソッドを呼び出して、すべての実行中のタスクを強制停止することができます。

  1. シャットダウンされましたか?
  2. 終了していますか?
Runnable task = new Runnable() {
    public void run() {
        // 执行任务逻辑
        if (executor.isShutdown() && !executor.isTerminated()) {
            // 执行清理操作
        }
    }
};

shutdown() メソッドを呼び出すと、スレッドプールが新しいタスクの受け入れを停止しますが、すでに提出されたタスクの実行を停止しません。実行中のタスクを停止するには、awaitTermination() メソッドと shutdownNow() メソッドを併用する必要があります。

bannerAds