Java スレッド中断の正しい方法と注意点
Javaにおいて、スレッドを正しく中断する方法は通常2つあります。
- interrupt()メソッドを使用:スレッドオブジェクトのinterrupt()メソッドを呼び出すことで、スレッドを中断することができます。スレッドが中断されると、スレッドの中断フラグがtrueに設定され、InterruptedException例外がスローされます。スレッドの実行中には、中断フラグをチェックして、スレッドを継続するか停止するかを決定することができます。
次に示すコード例:
Thread thread = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// 执行线程逻辑
}
});
thread.start();
// 中断线程
thread.interrupt();
- volatile変数またはAtomicBoolean変数を使用すると、スレッドの継続実行を制御するためにvolatile変数またはAtomicBoolean変数を使用できます。スレッドを中断する必要がある場合は、変数の値を変更し、スレッドはその変数の値を確認することで継続実行を決定できます。
以下はサンプルコードです。
volatile boolean flag = true;
Thread thread = new Thread(() -> {
while (flag) {
// 执行线程逻辑
}
});
thread.start();
// 中断线程
flag = false;
注意すべきことは、スレッドを中断することは、そのスレッドがすぐに停止することを意味するのではなく、中断フラグが設定された後、スレッドが中断フラグによって実行を停止するかどうかを決定できることです。スレッドのロジックを記述する際には、適切な場所で中断フラグを確認し、スレッドが中断に適切に応答できるようにする必要があります。