多线程08.优雅结束线程的三种方式
1.使用flag
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(); } }
2.使用线程中断方法结束
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(); } }
3.使用守护线程结束
public class ThreadService { private Thread executeThread; private boolean finished = false; public void execute(Runnable task) { executeThread = new Thread() { @Override public void run() { Thread runner = new Thread(task); runner.setDaemon(true); runner.start(); try { runner.join(); finished = true; } catch (InterruptedException e) { //e.printStackTrace(); } } }; executeThread.start(); } public void shutdown(long mills) { long currentTime = System.currentTimeMillis(); while (!finished) { if ((System.currentTimeMillis() - currentTime) >= mills) { System.out.println("任务超时,需要结束他!"); executeThread.interrupt(); break; } try { executeThread.sleep(1); } catch (InterruptedException e) { System.out.println("执行线程被打断!"); break; } } finished = false; } }
测试:
public class ThreadCloseForce { public static void main(String[] args) { ThreadService service = new ThreadService(); long start = System.currentTimeMillis(); service.execute(() -> { //load a very heavy resource. /*while (true) { }*/ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } }); service.shutdown(10000); long end = System.currentTimeMillis(); System.out.println(end - start); } }
---------------------------------------------------------------------------
国之殇,未敢忘!
南京大屠杀!
731部队!
(有关书籍《恶魔的饱食》)以及核污染水排海等一系列全无人性的操作,购买他们的食品和为它们提供帮助只会更加变本加厉的害你,呼吁大家不要购买日本相关产品
昭昭前事,惕惕后人
吾辈当自强,方使国不受他人之侮!
---------------------------------------------------------------------------
作者:三号小玩家
出处:https://www.cnblogs.com/q1359720840/
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 版权信息