守护线程
守护线程与用户线程的区别只在于线程结束的时机。
执行以下代码,你会发现虽然daemonThread线程内部定义了一个死循环,但整个程序任然会在userThread执行完成之后不久自动退出。
public class Example6 { public static void main(String[] args) { final Thread userThread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 100; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }); userThread.start(); Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println("用户线程是否alive:"+userThread.isAlive()); } } }); daemonThread.setDaemon(true);//设置为守护线程 daemonThread.start(); } }
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去(即,当JVM中所有的线程都是守护线程的时候, JVM就可以退出了)。 垃圾回收线程也是守护线程。
public class Example6 { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while (true) {} } }); daemonThread.setDaemon(true);//设置为守护线程 daemonThread.start(); for (int i = 0; i < 100; i++) { try { Thread.sleep(200); System.out.println(daemonThread.isAlive()); } catch (InterruptedException e) { e.printStackTrace(); } } } }