守护线程
Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)
守护线程的特点
只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器)
如何设置守护线程
代码中开启一个线程,在run方法中又创建了一个线程,观察控制台输出
会一直打印 “这里是 childThrad 线程”,这是因为新建的线程一直在循环执行,也就证明了用户线程正在运行,守护线程将会一直存在。
把代码中的注释放开,setDaemon(true),表示设置该线程为守护线程,运行后观察控制台输出:
这里是 userThread 线程
这里是 childThrad 线程
Process finished with exit code 0
只打印了两行日志就结束了,这是因为创建的userThread线程结束工作,做为守护线程的daemonThread就随着jvm一起结束工作
public class DaemonThread {
public static void main(String[] args) {
testDaemon();
}
public static void testDaemon() {
Thread userThread = new Thread(new Runnable() {
@Override
public void run() {
Thread daemonThread = new Thread(new ChildThread());
// daemonThread.setDaemon(true);
daemonThread.start();
System.out.println("这里是 userThread 线程");
}
});
userThread .start();
}
}
class ChildThread implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("这里是 childThrad 线程");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
-- 控制台输出
这里是 userThread 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
这里是 childThrad 线程
ps:
守护线程的运用目前理解的不透彻,后面章节会继续补充
网友评论