Javaの中で、スレッドをインタラプトする方法はどのように使われますか?
Javaでは、Threadクラスのinterrupt()メソッドを使用してスレッドを中断することができます。このメソッドの構文は以下の通りです:
public void interrupt()
この方法を使用するには、まずThreadオブジェクトを作成し、スレッドを中断する必要がある場所でinterrupt()メソッドを呼び出す必要があります。スレッドが中断されると、中断状態がtrueに設定されます。
以下是一个简单的例子,展示了如何使用interrupt()方法来中断线程:
public class MyThread extends Thread {
public void run() {
try {
// 在这里执行线程的任务
// 使用Thread.sleep()模拟一个耗时的操作
for (int i = 0; i < 10; i++) {
System.out.println("执行任务...");
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("线程被中断!");
}
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
// 在某个时间点上中断线程
try {
Thread.sleep(5000); // 等待5秒
thread.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
上記の例では、Threadクラスを継承したMyThreadというカスタムスレッドクラスを作成します。run()メソッドでは、Thread.sleep()メソッドを使用して時間のかかる操作をシミュレートします。メインスレッドでは、MyThreadオブジェクトを作成し、そのstart()メソッドを呼び出してスレッドを開始します。そして、5秒待ってからthread.interrupt()を呼び出してスレッドを中断します。スレッドが中断されると、InterruptedException例外がスローされ、catchブロックで中断状況を処理します。
注意すべきことは、interrupt()メソッドはスレッドに中断リクエストを送信するだけであり、具体的な中断処理のロジックはスレッドのrun()メソッド内で自分で実装する必要がある点です。run()メソッド内でisInterrupted()メソッドを使用してスレッドの中断状態を確認し、スレッドの実行を終了するかどうかを決定することができます。
さらに、現在のスレッドの割り込み状態を確認し、割り込みをクリアするために、Threadクラスの静的メソッドThread.interrupted()を使用することもできます。このメソッドは、現在のスレッドの割り込み状態を返し、その状態をfalseにリセットします。