请使用代码举例说明守护线程的作用
时间: 2024-09-27 11:12:53 浏览: 24
浅谈java中守护线程与用户线程
守护线程(Daemon Thread)是一种特殊的后台线程,在主线程结束时,如果没有存活的非守护线程,Java虚拟机会自动关闭所有守护线程。下面是一个简单的例子来展示守护线程的作用:
```java
public class DaemonThreadExample {
public static void main(String[] args) {
// 创建一个守护线程
Thread daemonThread = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("守护线程正在运行...");
try {
// 模拟耗时操作
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("守护线程已退出");
}
});
// 设置守护线程
daemonThread.setDaemon(true);
// 主线程启动
new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("主线程正在运行...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("主线程即将结束");
}).start();
// 等待主线程结束
while (true) {
if (!Thread.currentThread().equals(daemonThread)) {
break;
}
try {
Thread.sleep(100); // 主线程结束后,守护线程才会退出
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 输出:守护线程已退出
}
}
```
在这个例子中,主线程睡眠5秒后结束,而守护线程会在主线程结束后立即停止运行,因为它的存在不是必需的。如果主线程不设置守护线程,那么守护线程将会一直运行直到程序强制退出。
阅读全文