如何優雅的結束執行緒(一)
阿新 • • 發佈:2018-11-22
第一種方式是通過一個開關控制
public class ThreadCloseGraceful { private static class Worker extends Thread { private volatile boolean start = true; @Override public void run() { while (start) { // } } public void shutdown() { this.start = false; } } public static void main(String[] args) { Worker worker = new Worker(); worker.start(); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } worker.shutdown(); } }
第二種方式是通過打斷interrupt打斷執行緒
public class ThreadCloseGraceful2 { private static class Worker extends Thread { @Override public void run() { while (true) { if (Thread.interrupted()) break; } //------------- //------------- //------------- } } public static void main(String[] args) { Worker worker = new Worker(); worker.start(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } worker.interrupt(); } }
汪文君老師的多執行緒,這邊是比較完美的狀態,但是常常我們在專案中可能不會有這樣一個flag或者也不會丟擲這個異常
那麼我們可以使用一種類似stop的方式(自己寫一個stop)來結束它