実行時に長時間実行されているJavaスレッドを停止/強制終了するにはどうすればよいですか? タイムアウト->キャンセル->中断状態

公開: 2021-07-17

終了するのに予想以上に時間がかかるJavaスレッドを強制終了する方法は?タイムアウト->キャンセル->中断状態

長時間実行されているJavaスレッドを強制終了する方法を考えたことはありますか? 以下の質問はありますか?

  • 一定期間後にスレッドを強制終了/停止します
  • Javaで指定された制限時間後にスレッドを強制終了する
  • Javaスレッドを強制終了する方法
  • 例を使用してJavaでスレッドを停止する方法
  • Javaコード例でスレッドを停止する方法
  • stopメソッドを使用せずにJavaでスレッドを停止する方法

以下の質問のいずれかがある場合は、適切な場所にいます。 今日は、長時間実行されているスレッドを強制終了するJava8の方法を示す簡単な例について説明します。

ロジックとは:

  1. クラスCrunchifyJavaTaskTimeout.javaを作成します
  2. スレッドプールサイズが1つだけのJavaスレッドエグゼキュータを作成します。
  3. 3秒のタイムアウトでCrunchifyRunnerオブジェクトの4つの将来のタスクを作成します
  4. CrunchifyRunner.javaは、 call()メソッドを実装する単純なクラスです。
    • futureTask = 4場合、 20 secondsの遅延が発生します
  5. 将来が3 secondsに達すると、スレッドがまだ実行されている場合はタイムアウト例外が発生します
    • タイムアウトになったら、crunchifyFutureを使用してタスクをキャンセルする必要があります。 cancel( true ) ;
    • futureTaskがキャンセルされると、 InterruptedExceptionがトリガーされます(スレッドが待機中、スリープ中、またはその他の方法で占有されている場合にスローされ、アクティビティの前または最中にスレッドが中断されます。メソッドは、現在のスレッドが中断されたかどうかをテストしたい場合があります。その場合は、すぐにこの例外をスローします。)

始めましょう:

ステップ-1CrunchifyRunner.javaクラスを作成します

ステップ-2クラスCrunchifyJavaTaskTimeout.javaを作成します

ステップ-3

CrunchifyJavaTaskTimeout.javaを右クリックして、Javaアプリケーションとして実行します。

以下の結果がEclipseコンソールに表示されます。

実行時に停止するJavaスレッドを強制終了する方法

このトピックについて質問がある場合はお知らせください。