標籤:lock stack 自動 ack rri read class rup code
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) { System.out.println("intrupted finished"); // e.printStackTrace(); } } }; executeThread.start(); } public void shutdown(long mills) { long currentTime = System.currentTimeMillis(); while (!finished) { long cost=(System.currentTimeMillis() - currentTime); System.out.println(cost); if (cost>= mills) { System.out.println("timeout!!!"); executeThread.interrupt(); break; } try { executeThread.sleep(1); } catch (InterruptedException e) { System.out.println("execute is intrupeted"); break; } } finished=false; }}
通過關閉主線程的方式讓守護線程 自動關閉
子線程再運行結束時通過join 通知主線程 說自己執行完了,通過結束中斷主線程來讓子線程自動結束,解決了 線程block 中無法結束的問題
public class ThreadCloseForce { public static void main(String[] args) { ThreadService service=new ThreadService(); long start=System.currentTimeMillis(); service.execute(()->{ //read data try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); service.shutdown(10000); long end=System.currentTimeMillis(); System.out.println(end-start); }}
java 關閉線程