守护线程是什么?它与普通线程有何不同?
在Java中,线程分为两种类型:用户线程和守护线程。
守护线程是一种特殊的线程,它在后台默默地完成一些系统性的服务,比如垃圾回收线程,JIT线程就可以理解为守护线程。这些线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,Java虚拟机也就退出了。守护线程并不会阻止Java虚拟机退出。
设置守护线程的方法是调用Thread对象的setDaemon(true)方法。需要注意的是,一定要在调用线程的start()方法之前设置。
这是一个简单的守护线程的例子:
public class DaemonThreadExample extends Thread {
public void run() {
while (true) {
processSomething();
}
}
private void processSomething() {
// processing some job
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread t = new DaemonThreadExample();
t.setDaemon(true);
t.start();
// continue program
// daemon thread will automatically exit when all user threads are done.
}
}
在这个例子中,DaemonThreadExample是一个守护线程,它会在所有用户线程(这里指主线程)结束后自动退出。