Ako v Jave zabijete java.lang.Thread
?
Pozri tento vlákno od Sunu o tom, prečo zrušili funkciu Thread.stop()
. Podrobne sa v ňom rozoberá, prečo bola táto metóda zlá a čo by sa malo robiť na bezpečné zastavenie vlákien vo všeobecnosti.
Spôsob, ktorý odporúčajú, je použiť zdieľanú premennú ako príznak, ktorý požiada vlákno na pozadí o zastavenie. Túto premennú potom môže nastaviť iný objekt požadujúci ukončenie vlákna.
Všeobecne platí, že nie't..
Požiadate ho, aby prerušilo to, čo práve robí, pomocou Thread.interrupt() (odkaz na javadoc)
Dobré vysvetlenie prečo je v javadoc tu (odkaz na java technote).
Jedným zo spôsobov je nastavenie premennej triedy a jej použitie ako sentinelu.
Class Outer {
public static volatile flag = true;
Outer() {
new Test().start();
}
class Test extends Thread {
public void run() {
while (Outer.flag) {
//do stuff here
}
}
}
}
Nastavte externú premennú triedy, t. j. flag = true vo vyššie uvedenom príklade. Nastavte ju na false, aby ste 'zabili' vlákno.