java中的线程分为两类:用户线程、守护线程。守护线程(Daemon)是一种运行在后台的线程服务线程,当用户线程存在时守护线程也可以同时存在,如果用户线程全部消失(程序执行完毕,JVM进程结束)时守护线程也会消失。
用户线程就是用户自己开发或者由系统分配非人防主线程,其处理的是核心功能,守护线程就像用户线程的保镖一样,如果用户线程一旦消失,守护线程就没有存在的意义了。在java中提供有自动垃圾收集机制,实际上这就是属于一个守护线程,当用户线程存在时,GC线程将一直存在,如果全部的用户线程执行完毕了,那么GC线程就没有存在的意义了。
java中的线程都是通过Thread类来创建的,用户线程和守护线程除了运行模式的区别外,其他完全相同。
守护线程操作方法:
范例:使用守护线程
public class ThreadDemo334 {
public static void main(String[] args) {
Thread userThread=new Thread(()->{
for(int x=0; x<2;x++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在运行、x="+x);
}
},"用户线程"); //完成核心业务
Thread DaemonThread=new Thread(()->{
for (int x = 0; x <Integer.MAX_VALUE; x++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在运行、x="+x);
}
},"守护线程") ; //完成核心业务
DaemonThread.setDaemon(true); //设置为守护线程
userThread.start(); //启动用户线程
DaemonThread.start(); //启动守护线程
}
}
执行结果
用户线程正在运行、x=0
守护线程正在运行、x=0
守护线程正在运行、x=1
用户线程正在运行、x=1
本程序定义了一个守护线程,并且该守护线程将一直进行信息的输出,但是通过执行的结果可以发现,当用户线程消失后守护线程也同时结束。