守护线程
main线程是用户线程;只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。
守护线程是在用户线程都退出时,突然退出的,此时守护线程的任务不一定完成了。
public class rrr { public static void main(String[] ddd){ FutureTimeOutThread timeOutThread = new FutureTimeOutThread(); timeOutThread.setDaemon(true);//守护线程, timeOutThread.start(); FutureTimeOutThread2 timeOutThread1 = new FutureTimeOutThread2(); timeOutThread1.setDaemon(false);// 不是守护 timeOutThread1.start(); System.out.println("2222"); } static class FutureTimeOutThread extends Thread{//守护 @Override public void run() { FutureTimeOutThread1 timeOutThread = new FutureTimeOutThread1(); timeOutThread.start(); for(int i =0;i<3;i++) {//外层线程退出,里面开的线程不会退出,只有非守护都退出才退出 System.out.println("1111"); } } } static class FutureTimeOutThread1 extends Thread{//默认也是守护 @Override public void run() { for(int i =0;i<3;i++) { System.out.println("222"); } } } static class FutureTimeOutThread2 extends Thread{//不是守护 @Override public void run() {//main线程执行完,只要这个非守护线程还在,守护就还在。 //main执行完,这个非守护可以一直执行。 //main和这个非守护都执行完,守护立马退出。 //守护都执行完,这个非守护不会退出 for(int i =0;i<3;i++) { System.out.println("333"); } } } }