Java中线程的分类:
- 用户线程
- 守护线程
区分:isDaemon() 返回false为用线程,true为守护线程
public final boolean isDaemon() {
return daemon;
}
private boolean daemon = false;
进入源码发现变量daemon的默认值为false,这说明我们自己创建的线程默认是用户线程
设置守护线程:seDatemon(boolean on)
on为ture是设置守护线程,要在start()之前调用
thread.setDaemon(true);
守护线程:陪伴线程
- 只要JVM进程中任何一各用户线程没有结束,守护线程就在工作
- 典型的守护线程就是垃圾回收线程
观察下列代码结果:
Thread thread = new Thread(new A(),"Thread1");
thread.setDaemon(true);
thread.start();
Thread thread1 = new Thread(new A(),"Thread2");
thread1.start();
Thread.sleep(2000);
thread1.interrupt();
Thread.sleep(5000);
System.out.println("over");
可以观察到,当用户线程2中断后,守护线程还没有结束,这是为什么呢,只有当还存在用户线程时,守护线程才继续运行,那么程序中还在执行的线程只有主线程,所以得出结论:主线程也是用户线程