在Java中有两种线程,一种为用户线程,一种为守护线程。
守护线程是一种特殊的线程,它具有“陪伴”的含义,当进程中不存在非守护线程时,则守护线程自动销毁。
典型的守护线程就是垃圾回收线程。
当进程中没有线程了,则垃圾回收线程也就没有存在的必要了,自动销毁。
任何一个守护线程,都是JVM中所有的非守护线程的保姆,只要当前JVM实例中存在任何一个非守护线程,且没有结束,守护线程就在工作,只有当最后一个非守护线程结束时,守护线程才随着JVM一同结束工作。
Daemon的作用就是为其他线程运行提供便利,守护线程最典型的应用就是GC。
线程代码:
public class Thread1 extends Thread {
private int i = 0;
@Override
public void run() {
try {
while (true) {
i++;
System.out.println("i = " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
执行代码:
public class Main {
public static void main(String[] args) {
try {
Thread1 thread = new Thread1();
thread.setDaemon(true);
thread.start();
Thread.sleep(5000);
System.out.println("main线程停止了,则守护线程也停止了。不在打印。");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
执行结果:
随着主线程停止了工作,守护线程随即也停止了工作。
源码地址:https://github.com/lilinzhiyu/threadLearning