JAVA 守护线程 作者:马育民 • 2020-02-02 08:58 • 阅读:10106 # 介绍 线程划分为了两类: - 用户线程 (User Thread),没有特殊设置的,都是用户线程 - 守护线程 (Daemon Thread),需要特殊设置 ### 守护线程 守护线程,对线程的一种标识。守护线程 **为其他线程提供服务**,如果剩下的全是守护线程时,java程序就退出 **特点:**一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作 **应用:**最常见的守护线程:垃圾回收线程 **总结:** - 所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。 - 只要非守护线程还在运行,程序就不会终止 # 设置守护线程 通过调用Thread类的```setDaemon(true)```方法来设置当前的线程为守护线程 **注意:** 1. 方法 `setDaemon(true)` 必须在 `start()` 方法之前调用,否则会抛出IllegaThreadStateException异常。 2. 不是所有的任务都可以分配给守护线程来执行,比如:读写操作或者计算逻辑。 ### 提示 默认创建的线程为 **非守护线程**,即:用户线程 在守护线程中,创建的新线程也是 守护线程 # 例子: Runnable接口实现类 ``` public class DaemonThread implements Runnable { @Override public void run() { for(int i=0;i<=100000;i++){ System.out.println("守护线程:"+i); } } } ``` 启动类 ``` public class DaemonThreadMain { public static void main(String[] args) { Thread t=new Thread(new DaemonThread()); t.setDaemon(true); t.start(); for(int i=0;i<=300;i++){ System.out.println("主线程:"+i); } } } ``` 执行结果如下: ``` 守护线程:59 主线程:297 守护线程:60 主线程:298 守护线程:61 主线程:299 守护线程:62 主线程:300 守护线程:63 守护线程:64 守护线程:65 守护线程:66 守护线程:67 守护线程:68 ``` 主线程运行结束后,守护线程也会结束(守护线程不会立即结束) # 判断是否为守护线程 ``` final boolean isDaemon() ``` 原文出处:http://malaoshi.top/show_1EF4uOWphbCJ.html