面试题答案
一键面试1. Java守护线程的作用
守护线程(Daemon Thread)是一种特殊的线程,它的作用是为其他线程提供服务。当JVM中所有的非守护线程都结束时,JVM会自动终止所有守护线程,即使守护线程可能还在执行任务。守护线程通常用于执行一些后台任务,比如垃圾回收线程就是一个守护线程,它在后台不断地监控和回收不再使用的内存,不影响程序的正常退出。
2. 简单使用场景举例
假设我们有一个程序,需要在后台定期清理临时文件。我们可以创建一个守护线程来执行这个任务,这样当主线程(非守护线程)结束时,清理临时文件的任务也会随着守护线程的终止而结束,不会影响程序的退出。
import java.io.File;
public class DaemonThreadExample {
public static void main(String[] args) {
Thread cleanerThread = new Thread(() -> {
while (true) {
try {
// 模拟清理临时文件
System.out.println("Cleaning temporary files...");
File tempDir = new File(System.getProperty("java.io.tmpdir"));
for (File file : tempDir.listFiles()) {
if (file.isFile() && file.getName().startsWith("temp")) {
file.delete();
}
}
Thread.sleep(5000); // 每5秒清理一次
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
cleanerThread.setDaemon(true);
cleanerThread.start();
// 主线程执行一些其他任务
try {
Thread.sleep(10000); // 主线程执行10秒后结束
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread is ending.");
}
}
3. 创建守护线程的方法
在Java中,通过调用线程对象的 setDaemon(true)
方法来将一个线程设置为守护线程,并且必须在调用 start()
方法启动线程之前设置。例如:
Thread daemonThread = new Thread(() -> {
// 线程执行的任务
});
daemonThread.setDaemon(true);
daemonThread.start();