16.4.2 后台线程
16.4.2 后台线程
什么是后台线程
定义
后台线程(Daemon Thread
),是在后台运行的一种线程,
用途
后台线程主要用来向其他的线程提供服务。JVM
的垃圾回收线程就是典型的后台线程。
特征
如果所有的前台线程都死亡,后台线程会自动死亡。
Thread类后台线程方法
如何把一个线程设置成后台线程
调用Thread
对象的setDaemon(true)
方法可将指定线程设置成后台线程。
如何判断一个线程是否是后台线程
Thread
类还提供了一个isDaemon()
方法,用于判断指定线程是否为后台线程。
Thread 类方法 |
描述 |
---|---|
void setDaemon(boolean on) |
Marks this thread as either a daemon thread or a user thread. |
boolean isDaemon() |
Tests if this thread is a daemon thread. |
程序 后台线程示例
下面程序将执行线程设置成后台线程
1 | public class DaemonThread extends Thread |
运行结果:
1 | main 0 |
上面程序中先将t
线程设置成后台线程,然后启动该线程,本来该线程应该执行到循环变量i
等于999
时才会结束,
但从运行结果中不难发现该后台线程无法运行到循环变量i
等于999
时,因为程序中唯一的前台线程(main
线程)运行结束后,JVM
会主动退出,因而后台线程也就被结束了。
小结
前后台的默认情况
- 主线程默认是前台线程,
- 前台线程创建的子线程默认是前台线程,
- 后台线程创建的子线程默认是后台线程。
后台线程死亡需要一定时间
当所有的前台线程死亡后,JVM
会给后台线程发出死亡通知,但后台线程从接收死亡通知到真正死亡,需要一定时间。
要先设置为后台线程 再启动线程
要将某个线程设置为后台线程,必须在该线程启动之前设置,也就是说,setDaemon(true)
必须在start()
方法之前调用,否则会引发IllegalThreadStateException
异常。