「Thread.stop()」を使用せずにJavaスレッドを安全に停止するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-22 09:27:11
オリジナル
768 人が閲覧しました

How to Safely Stop a Java Thread Without Using `Thread.stop()`?

非推奨の Thread.stop() メソッドを使用せずにスレッドを効果的に強制終了する方法

Java Thread クラスは stop() メソッドを提供しますスレッドを終了する手段として使用されますが、非推奨になっているため、使用しないでください。この記事では、割り込みメソッドを使用してスレッドを終了する別の方法を紹介します。

割り込みを使用してスレッドを停止する

安全ではない stop() を直接呼び出す代わりに、データ破損を引き起こす可能性がある場合は、割り込みを使用して、スレッドが正常に終了する必要があることをスレッドに通知できます。その仕組みは次のとおりです:

public class InterruptedExceptionExample {

    private static volatile boolean shutdown = false;

    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (!shutdown) {
                try {
                    System.out.println("Running...");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        thread.start();
        System.out.println("Press enter to quit");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        shutdown = true;
        thread.interrupt();
    }
}
ログイン後にコピー

このコードでは:

  1. ループ内で無限に実行されるスレッドを作成し、5 秒ごとに「実行中...」を出力します。
  2. false に初期化された静的ブール フラグ (シャットダウン) があり、これはスレッドに通知するために使用されます。 stop.
  3. スレッドの run() メソッドは定期的にシャットダウン フラグをチェックします。 true に設定されている場合、スレッドはループを終了します。
  4. main() メソッドはスレッドを作成して開始し、シャットダウン フラグを true に設定するためのユーザー入力を待ちます。
  5. 最後に、スレッドは、interrupt() を使用して正常に終了します。

使用の利点中断:

スレッドの中断には、非推奨の stop() に比べていくつかの利点があります:

  • 正常終了: 中断されたスレッドにはクリーンアップの機会があります。リソースを確保するか、必要なタスクを実行する前にexiting.
  • 例外スロー: 割り込みにより、sleep() や wait() などの特定のメソッドが InterruptedException 例外をスローします。適切に作成されたスレッドは、これらの例外をキャッチして割り込みを処理できます。
  • 安全かつ堅牢: データ破損を引き起こす可能性がある stop() とは異なり、割り込みはより安全で信頼性の高い終了方法です。スレッド。

以上が「Thread.stop()」を使用せずにJavaスレッドを安全に停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート