守护线程

!!! note 目录

守护线程

守护线程(Daemon Thread)是 Java 中的一种特殊线程,其主要用于后台服务,如垃圾回收器等。
与用户线程不同,当所有用户线程都结束时,守护线程会自动终止。
守护线程的存在并不会阻止 JVM 退出。守护线程的生命周期依赖于用户线程,只有在所有用户线程都结束时,JVM 才会终止守护线程。

一、创建守护线程

  1. 创建线程对象:可以通过继承 Thread 类或实现 Runnable 接口来创建线程对象。
  2. 将线程设置为守护线程:使用 Thread 类的 setDaemon(true) 方法将线程设置为守护线程。必须在启动线程之前调用此方法,否则会抛出 IllegalThreadStateException 异常。
  3. 启动线程:调用 start() 方法启动线程。

二、示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.camellia.thread.DaemonThread;

/**
* <p>
* 1. 在JVM中,始终存在一个隐藏的守护线程,即垃圾回收器(GC)线程。
* <p>
* 2. 如何将线程设置为守护线程:
* - 在启动线程之前使用 setDaemon(true) 方法将其设置为守护线程。
*/
public class DaemonThreadTest {
public static void main(String[] args) {
// 创建 MyThread 的实例
MyThread myThread = new MyThread();
// 在启动线程之前将其设置为守护线程
myThread.setDaemon(true);
myThread.start();

// 主线程(用户线程)
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "===>" + i);
try {
Thread.sleep(1000); // 线程休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 虽然 MyThread 执行了一个无限循环,但设置为守护线程意味着当所有用户线程(如主线程)结束时它会终止。
}
}

/**
* MyThread 类继承自 Thread,演示了简单的守护线程行为。
*/
class MyThread extends Thread {

/**
* 线程启动后执行的 run 方法。
*/
@Override
public void run() {
int i = 0;
while (true) {
System.out.println(Thread.currentThread().getName() + "\t" + (++i));
}
}
}