一、概念
- 用户线程:可以理解为主要线程或者前台线程,JVM 必须等待所有的用户进行结束才能退出。
- 守护线程:可以理解为后台线程,JVM 无需等待守护线程结束即可退出。场景:GC、监控等
二、示例代码
public class TraditionalThreadTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("主线程(用户线程) 开始运行...");
Thread userThread = new Thread(() -> {
try {
System.out.println(" => 用户线程[" + Thread.currentThread().getName() + "] 开始执行...");
for (int i = 0; i < 10; i++) {
System.out.println(" => 用户线程,正在执行任务 " + (i + 1));
Thread.sleep(500);
}
System.out.println(" => 用户线程任务完成。");
} catch (InterruptedException e) {
System.out.println(" => 用户线程被中断");
}
});
userThread.setName("my-user-thread");
Thread daemonThread = new Thread(() -> {
System.out.println(" -> 守护线程[" + Thread.currentThread().getName() + "] 开始执行...");
while (true) {
try {
System.out.println(" -> 守护线程,正在后台运行...");
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
daemonThread.setName("my-daemon-thread");
daemonThread.setDaemon(true);
userThread.start();
daemonThread.start();
Thread.sleep(2000);
System.out.println("主线程(用户线程)即将结束。JVM将继续运行,直到所有用户线程结束。");
}
}