1. 用户线程也是工作线程,当线程中的任务执行完或者以通知方式退出
2. 守护线程一般是为工作线程服务,当所有的线程用户线程结束,守护线程也结束
3.两者通过Thread类中的私有属性daemon区分,true为守护线程,false为用户线程。
默认为false,即默认为用户线程
4. 如果想将一个线程设置为守护线程,需要调用 setDaemon(boolen on) 方法,传入true
5. 必须先设置再开启线程,即先 setDaemon(true) , 再 start() , 否则运行时会出现异常IllegalThreadStateException(非法线程状态异常)。
就是要先设置好再开始,不能以用户线程的方式开始跑了,中途才去设置
6.简单演示
public class DaemonThread { public static void main(String[] args) throws InterruptedException { DT dt = new DT(); dt.setDaemon(true); dt.start(); // 子线程是一个无限循环,主线程循环5次 // 如果想其他线程结束后,子线程dt也结束 // 需要将子线程设置成守护线程 // dt.setDaemon(true); // 非法线程状态异常,要先设置再start for (int i = 0; i < 5; i++) { Thread.sleep(1000); System.out.println("主线程 " + i); } } } class DT extends Thread{ @Override public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程"); } } }
上述代码中,子线程是一个无限循环,如果不设置为守护线程,会一直进行
设置后,当主线程执行5次结束后,子线程也会随之结束