Java面试题之多线程 用户线程和守护线程有什么区别?
在Java中,用户线程和守护线程是两种不同类型的线程,它们之间有几个关键的区别:
定义:
生命周期:
创建方式:
Thread
类或实现Runnable
接口来创建。Thread
类的setDaemon(true)
方法来设置。例如:
Thread thread = new Thread(new MyRunnable());
thread.setDaemon(true); // 设置为守护线程
优先级:
使用场景:
public class DaemonThreadExample {
public static void main(String[] args) {
Thread userThread = new Thread(() -> {
System.out.println("User thread is running");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("User thread finished");
});
Thread daemonThread = new Thread(() -> {
while (true) {
System.out.println("Daemon thread is running");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
daemonThread.setDaemon(true); // 设置为守护线程
userThread.start();
daemonThread.start();
}
}
在这个示例中,用户线程会运行并在完成后退出,而守护线程会在用户线程结束后自动终止。