我一直在尋找方法來殺死一個線程,看來這是最流行的方法替代方法殺死線程
public class UsingFlagToShutdownThread extends Thread {
private boolean running = true;
public void run() {
while (running) {
System.out.print(".");
System.out.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
}
System.out.println("Shutting down thread");
}
public void shutdown() {
running = false;
}
public static void main(String[] args)
throws InterruptedException {
UsingFlagToShutdownThread t = new UsingFlagToShutdownThread();
t.start();
Thread.sleep(5000);
t.shutdown();
}
}
但是,如果在while循環中,我們產生另一個而它與填充另一個對象數據(比如正在運行和更新的gui),那麼我們如何回調 - 特別是考慮到這種方法可能會被多次調用,所以我們有很多線程,而while(running)然後改變標誌爲一個會改變它爲每個人?
謝謝
**沒有一個解決方案,但最佳實踐:**聲明你的標誌'running'爲'volatile'。 – 2013-04-05 14:48:45
線程查殺的最佳方法是不要嘗試。如果有任何方法可以設計應用程序,以便線程無需在操作系統在進程終止時殺死線程時被殺死,那麼您應該這樣做。 – 2013-04-05 14:56:53
但如果run方法有無限循環,即使關閉了gui線程正在將數據抽入,它仍然不會死亡:( – Biscuit128 2013-04-05 14:57:59