Javaでjava.lang.Thread
を殺すにはどうしたらいいですか?
この Sun による Thread.stop()
を非推奨にした理由に関するスレッド をご覧ください。 このスレッドがなぜ悪い方法なのか、そして一般的にスレッドを安全に停止させるためには何をすべきなのかを詳しく説明しています。
彼らが推奨する方法は、バックグラウンドのスレッドに停止を求めるフラグとして共有変数を使用することです。 この変数は、スレッドの終了を要求する別のオブジェクトによって設定することができます。
一般的にはないでしょう。
Thread.interrupt() (javadoc link)]1を使って、自分がやっていることを中断してもらいます。
その理由については、javadocに良い説明がありますここ(java technote link)。
1つの方法は、クラス変数を設定し、それをセンチネルとして使用することです。
Class Outer {
public static volatile flag = true;
Outer() {
new Test().start();
}
class Test extends Thread {
public void run() {
while (Outer.flag) {
//do stuff here
}
}
}
}
外部のクラス変数を設定します。例えば、上記の例では flag = true です。これを false に設定すると、スレッドを 'kill'します。