守护线程:系统的守护者,在后台默默地为系统服务, 比如垃圾回收线程,JIT线程等都可以理解为守护线程。
用户线程:系统的工作线程,执行业务代码的线程,当用户线程结束,只有守护线程存在时,JVM自然退出!
注意:守护线程必须在线程启动前面开启,否则会报出异常:守护线程失败
public class DaemonTest {
public static void main(String[] args) throws InterruptedException {
Thread t=new Daemon();
//t.setDaemon(true);//设置守护线程
//如果守护线程设置在线程启动的后面
t.start();
t.setDaemon(true);
/**
* IllegalThreadStateException
* 线程被当做用户线程,一直执行下去。在这个例子中t
*为守护线程,main为用户线程,当t为守护线程设置正确时候,main线程再休眠2秒后,退出,当前只有一个守护线程,整个程序随之结束
*/
Thread.sleep(2000);
}
}
class Daemon extends Thread{
public void run(){
while (true){
System.out.println("I am Alive");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}