ホームページ >Java >&#&チュートリアル >Javaでスレッドの終了を停止するにはどうすればよいですか?

Javaでスレッドの終了を停止するにはどうすればよいですか?

PHPz
PHPzオリジナル
2024-04-11 14:33:02873ブラウズ

Java でスレッドを停止および終了するには、次の 4 つの方法があります。interrupt() メソッド: スレッドを中断し、InterruptedException 例外をスローします。 stop() メソッド: スレッドが直ちに停止され、データ損失が発生する可能性があるため、推奨されません。割り込みフラグの設定: スレッドを終了する必要があるかどうかを判断するためにポーリングするスレッドのフラグを設定します。 join() の使用: 別のスレッドから join() を呼び出しているスレッドが終了するまで、現在のスレッドをブロックします。

Javaでスレッドの終了を停止するにはどうすればよいですか?

Java でスレッドの終了を停止する方法

Java では、さまざまな方法でスレッドを終了できます。アプリケーションの安定性とパフォーマンスを確保するには、スレッドを適切に終了する方法を理解することが重要です。この記事では、スレッドを停止および終了する一般的な方法について、実際の事例を交えて説明します。

方法 1:interrupt() メソッド

interrupt() メソッドは、スレッドの実行を中断するために使用できます。スレッドがスリープ中または I/O を待機している場合は、InterruptedException 例外を受け取ります。次の実際のケースでは、interrupt() メソッドを使用して、スリープ状態のスレッドを停止します。

public class InterruptThreadExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {
                System.out.println("已中断!");
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        thread.interrupt();
        thread.join(); // 等待线程终止
    }
}

出力:

已中断!

メソッド 2: stop() メソッド

stop() メソッドは、スレッドを即座に停止し、データ損失やアプリケーションの不安定性を引き起こす可能性があるため、推奨されません。代わりに interrupt() メソッドを使用することを強くお勧めします。

方法 3: 割り込みフラグを設定する

スレッドのポーリングに割り込みフラグを設定できます。このフラグが true に設定されている場合、スレッドは終了する必要があることを認識します。

public class InterruptFlagExample {

    private volatile boolean interrupted = false;

    public static void main(String[] args) throws InterruptedException {
        InterruptFlagExample example = new InterruptFlagExample();

        Thread thread = new Thread(() -> {
            while (!example.isInterrupted()) {
                // 做一些事情
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        example.setInterrupted(true);
        thread.join(); // 等待线程终止
    }

    public void setInterrupted(boolean interrupted) {
        this.interrupted = interrupted;
    }

    public boolean isInterrupted() {
        return interrupted;
    }
}

方法 4: Join

join() メソッドを使用して停止および実行できます。スレッドが終了するまで待ちます。 join() を呼び出す別のスレッドが終了するまで、現在のスレッドがブロックされます。

public class JoinExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {}
        });

        thread.start();
        thread.join(); // 等待线程终止
    }
}

これにより、他のスレッドが終了するまで、現在のスレッドが 10 秒間ブロックされます。

以上がJavaでスレッドの終了を停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。