守护线程是为其他线程的运行提供便利的线程。守护线程不会阻止程序的终止。
Java的垃圾收集机制的某些实现就使用了守护线程。
非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程。
程序可以包含守护线程和非守护线程。
程序只有守护线程时,该程序便可以结束运行。
如果要使一个线程成为守护线程,则必须在调用它的start方法之前进行设置(通过以true作为参数调用线程的setDaemon方法,可以将该线程定义为一个守护线程),否则会抛出IllegalThreadStateException异常。如果线程是守护线程,则isDaemon方法返回真。
注:1、如果在线程已经启动后,再试图使该线程成为守护线程,则会导致IllegalThreadStateException异常
2、事件调度线程是一个无穷循环的线程,而不是守护线程。因而,在基于窗口的应用程序调用System类的exit方法之前,事件调度线程不会终止。
3、不能将关键任务分配给守护线程。这些任务将会在事先没有警告的情况下终止,这可能导致不能正确地完成它们