Java高并发学习(四)

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线程还会不停的打印,永远不会结束。
--------------------- 
 

你可能感兴趣的:(并发)