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次结束后,子线程也会随之结束

本文详细介绍了Java中用户线程与守护线程的区别,包括如何设置守护线程、设置时机及注意事项,并通过示例代码展示了两者的不同行为。
855

被折叠的 条评论
为什么被折叠?



