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


猜你喜欢

转载自blog.csdn.net/huxiny/article/details/79771312