Thread.setDaemon()方法,从文档中我们可以发现,意思为后台线程、守护线程。一开始我对后台线程不是太理解,觉的Thread本身就是在不影响其他操作的情况下运行的,这就是后台线程。后来才发现,重点在于守护线程。下面来说一下,什么是守护线程:
thread = new Thread(this);
thread.setDaemon(true);
thread.start();
在启动线程前,调用setDaemon(true)方法,将线程设置成守护线程。若没调用,则称为常规线程
在Java虚拟机中,当不存在常规线程时,JVM会自动关闭。所以,当所有的常规线程都运行完闭后,不论守护线程是否执行完成,都将会中止,JVM关闭。因此,守护线程中最好不要写一些影响逻辑的业务的工作。
定义:守护线程,也可称为服务线程,当程序中没有可服务的线程时会自动离开。因此,守护线程的优先级比较低,用于为其他的线程等提供服务。
例子:java中最典型的守护线程就是垃圾回收线程。当我们的应中用没有任何常规线程运行时,就不会产生垃圾了,垃圾回收线程就无服务对象了,就会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是 什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个 或以上的非守护线程则JVM不会退出。