关于守护线程的知识
守护线程有一个应用场景,就是当主线程结束时,结束其余的子线程(守护线程)自动关闭,就免去了还要继续关闭子线程的麻烦。不过博主推荐,如果真有这种场景,还是用中断的方式实现比较合理。
还有补充一点,不是说当子线程是守护线程,主线程结束,子线程就跟着结束,这里的前提条件是:当前jvm应用实例中没有用户线程继续执行,如果有其他用户线程继续执行,那么后台线程不会中断,如下:
public class DaemonThreadTest { public static void main(String[] args) { Thread mainThread = new Thread(new Runnable(){ @Override public void run() { Thread childThread = new Thread(new ClildThread()); childThread.setDaemon(true); childThread.start(); System.out.println("I'm main thread..."); } }); mainThread.start(); Thread otherThread = new Thread(new Runnable(){ @Override public void run() { while(true) { System.out.println("I'm other user thread..."); try { TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); otherThread.start();如果把这句注释掉,JVM执行完就会退出 } } class ClildThread implements Runnable { @Override public void run() { while(true) { System.out.println("I'm child thread.."); try { TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
我试了,确实守护线程在一直跑。说明守护线程跟启动它的线程没有关系,而是整个JVM还存不存在用户线程。