Wie beendet man einen java.lang.Thread
in Java?
Siehe diesen Thread von Sun, warum Thread.stop()
veraltet ist. Er geht im Detail darauf ein, warum dies eine schlechte Methode war und was getan werden sollte, um Threads im Allgemeinen sicher anzuhalten.
Der Weg, den sie empfehlen, ist die Verwendung einer gemeinsam genutzten Variable als Flag, die den Hintergrund-Thread zum Anhalten auffordert. Diese Variable kann dann von einem anderen Objekt gesetzt werden, das die Beendigung des Threads anfordert.
In der Regel ist das nicht der Fall.
Sie bitten es zu unterbrechen, was auch immer es tut mit Thread.interrupt() (javadoc link)
Eine gute Erklärung, warum das so ist, finden Sie in der javadoc hier (java technote link)
Eine Möglichkeit besteht darin, eine Klassenvariable zu setzen und sie als Sentinel zu verwenden.
Class Outer {
public static volatile flag = true;
Outer() {
new Test().start();
}
class Test extends Thread {
public void run() {
while (Outer.flag) {
//do stuff here
}
}
}
}
Setzen Sie eine externe Klassenvariable, d.h. flag = true im obigen Beispiel. Setzen Sie sie auf false, um den Thread zu "killen".