Java でスレッドを停止および終了するには、次の 4 つの方法があります。interrupt() メソッド: スレッドを中断し、InterruptedException 例外をスローします。 stop() メソッド: スレッドが直ちに停止され、データ損失が発生する可能性があるため、推奨されません。割り込みフラグの設定: スレッドを終了する必要があるかどうかを判断するためにポーリングするスレッドのフラグを設定します。 join() の使用: 別のスレッドから join() を呼び出しているスレッドが終了するまで、現在のスレッドをブロックします。
Java では、さまざまな方法でスレッドを終了できます。アプリケーションの安定性とパフォーマンスを確保するには、スレッドを適切に終了する方法を理解することが重要です。この記事では、スレッドを停止および終了する一般的な方法について、実際の事例を交えて説明します。
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(); // 等待线程终止 } }
出力:
已中断!
stop() メソッドは、スレッドを即座に停止し、データ損失やアプリケーションの不安定性を引き起こす可能性があるため、推奨されません。代わりに interrupt()
メソッドを使用することを強くお勧めします。
スレッドのポーリングに割り込みフラグを設定できます。このフラグが 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; } }
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 サイトの他の関連記事を参照してください。