Java高并发学习(四)
驻守后台:守护线程(Daemon)
守护线程是一种特殊的线程,他是系统的守护者,在后台默默的完成一些系统性的服务。比如垃圾回收线程,JIT线程也可以理解为守护线程。与之相对应的是用户线程,用户线程可以认为是系统的工作线程,他会完成这个程序应该要完成的业务操作。如果用户线程全部结束了,这也意味着这个程序实际上无事可做了。守护线程要守护的线程已经不存在了,那么整个应用程序就应该结束。因此,当一个java程序内,只有守护线程时,java虚拟机就会自动退出。
下面简单的看一下守护线程的使用:
public class fist{
public static class MyThread extends Thread{
@Override
public void run(){
while(true){
System.out.println("I am alive");
}
}
}
public static void main(String args[]) throws InterruptedException {
MyThread t = new MyThread();
t.setDaemon(true);
t.start();
Thread.sleep(2000);
}
}
代码t.setDaemon(true)将线程t设置为守护线程。这里注意,守护线程必须在线程start()之前设置,否者你会得到一个异常,告诉你守护线程设置失败。但是程序依然可以正常执行。只是被当做用户线程而已。因此,如果不小心忽略了这个异常信息,你就很可能察觉不到这个错误。那你就会诧异为什么程序永远停不下来。
在这个例子中,由于t被设置为守护线程,系统中只有主线程main为用户线程,因此在main休眠两秒后退出时,整个程序也随之退出。但如果不把t设置为守护线程,main结束后,t线程还会不停的打印,永远不会结束。
---------------------