ホームページ > Java > &#&チュートリアル > スレッド中断は、Java の非推奨の `stop()` メソッドのより良い代替手段ですか?

スレッド中断は、Java の非推奨の `stop()` メソッドのより良い代替手段ですか?

Barbara Streisand
リリース: 2024-11-30 12:06:18
オリジナル
521 人が閲覧しました

Is Thread Interruption a Better Alternative to the Deprecated `stop()` Method in Java?

Stop() の代替としてのスレッド中断

「stop()」メソッドは、Java では一般的に推奨されません。予期せぬ副作用を引き起こします。スレッドを終了する別の方法は、割り込みによるものです。

スレッド割り込み

スレッドの割り込みは、スレッドの実行を正常に停止する必要があることを通知します。スレッドを中断するには、その「interrupt()」メソッドを呼び出します。スレッドが正常に動作し、割り込みを適切に処理する場合、スレッドは終了する前に現在のタスクを終了しようとします。

実装例

次のコードを考えてみましょう。

Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                Thread.sleep(5000);
                System.out.println("Hello World!");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Thread interrupted");
            }
        }
    }
});
ログイン後にコピー

このコードでは、スレッドはループ内で割り込みステータスを確認します。割り込みが発生すると、「InterruptedException」がスローされ、これが処理されてスレッドの割り込みステータスが再度設定されます。その後、スレッドはループを抜けて終了します。

考慮事項

  • 割り込みにより、「sleep()」メソッドと「wait()」メソッドが「InterruptedException」をスローします。
  • それを示すための別のブール フラグは必要ありません。
  • スレッドは、割り込みステータスをチェックし、「InterruptedExceptions」をキャッチすることで連携する必要があります。
  • catch ブロック内の現在のスレッドに割り込みフラグを設定することは、他のスレッドがそれを認識する必要がない限り、通常は不要です。中断が発生しました。

「Thread#isAlive() とThread#interrupted()

  • "Thread#isAlive()" は、スレッドが中断されたかどうかではなく、まだ実行中かどうかをチェックします。
  • "Thread#interrupted( )" は、スレッドが中断されたかどうかを確認し、割り込みフラグをクリアします。このメソッドは、フラグをクリアせずに中断ステータスをテストするために使用しないでください。予期しない動作につながる可能性があります。

以上がスレッド中断は、Java の非推奨の `stop()` メソッドのより良い代替手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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