Javaで別のスレッドに割り込み(interrupt)をかける方法をわかりやすく解説
Javaでは、interruptメソッドとInterruptedException例外を組み合わせることで、実行中のスレッドに割り込みをかけ、その処理を中断させることができます。
以下のサンプルコードでは、実行中のスレッドが割り込みを受けると、catchブロック内で新たな例外が発生するため、処理が停止する様子を確認できます。
サンプルコード
public class Demo extends Thread
{
public void run()
{
try
{
Thread.sleep(150);
System.out.println("tryブロック内のrunメソッド");
}
catch (InterruptedException e)
{
throw new RuntimeException("スレッドは割り込まれました");
}
}
public static void main(String args[])
{
Demo my_inst = new Demo();
System.out.println("Demoクラスのインスタンスが生成されました");
my_inst.start();
try
{
my_inst.interrupt();
}
catch (Exception e)
{
System.out.println("例外が処理されました");
}
}
}実行結果
Demoクラスのインスタンスが生成されました Exception in thread "Thread-0" java.lang.RuntimeException: スレッドは割り込まれました at Demo.run(Demo.java:12)
コードの解説
このプログラムでは、DemoというクラスがThreadクラスを継承しています。runメソッド内のtryブロックでは、Thread.sleep(150)によって150ミリ秒間スレッドを一時停止させています。もし割り込みが発生しなければ、続く出力文が実行されます。
一方、sleep中に割り込みを受けるとInterruptedExceptionがスローされ、catchブロックで捕捉されます。ここでは捕捉した例外をもとに、新たにRuntimeExceptionを投げてスレッドの処理を強制的に終了させています。これにより、コンソールには「スレッドは割り込まれました」というメッセージとスタックトレースが出力されます。
mainメソッドの流れ
mainメソッドでは、まずDemoクラスのインスタンスを生成し、startメソッドを呼び出してスレッドを起動します。その後、tryブロック内でinterruptメソッドを呼び出して対象スレッドに割り込みをかけます。割り込み処理自体で例外が発生した場合に備えて、catchブロックでも例外 handling を行っています。
ポイントまとめ
interrupt()を呼び出すと、対象スレッドの割り込みステータスが設定される- スレッドが
sleepやwaitなどでブロック中の場合、InterruptedExceptionがスローされる - catchブロックで適切に例外を処理することで、スレッドを安全に中断できる
このように、Javaの割り込み機構を利用すれば、実行中のスレッドを外部から協調的に停止させることが可能です。ただし、割り込みはあくまで「要求」であり、実際に停止させるかどうかはスレッド側の実装に依存する点に注意しましょう。
-
Javaで編集可能なJLabelを実装する方法
JLabelとはJLabelクラスはJComponentクラスを継承しており、JLabelのオブジェクトを使用することで、GUI上にテキストによる説明や情報を表示できます。JLabelの主な特徴は以下のとおりです。1行の読み取り専用テキスト、画像、またはその両方を表示できる重要なメソッドとして、setText()、setIcon()、setBackground()、setOpaque()、setHorizontalAlignment()、setVerticalAlignment()などが用意されているPropertyChangeListenerインターフェースを明示的に登録して、プロパティの変
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー