一、守护线程定义
守护线程(Daemon Thread)也被称之为后台线程或服务线程,守护线程是为用户线程服务的,当程序中的用户线程全部执行结束之后,守护线程也会跟随结束。 守护线程的角色就像“服务员”,而用户线程的角色就像“顾客”,当“顾客”全部走了之后(全部执行结束),那“服务员”(守护线程)也就没有了存在的意义,所以当一个程序中的全部用户线程都结束执行之后,那么无论守护线程是否还在工作都会随着用户线程一块结束,整个程序也会随之结束运行。
二、守护线程注意事项
守护线程的设置 setDaemon(true) 必须要放在线程的 start() 之前,否则程序会报错。也就是说在运行线程之前,一定要先确定线程的类型,并且线程运行之后是不允许修改线程的类型的。
三、守护线程的作用及应用场景
如果 JVM 中没有一个正在运行的非守护线程,这个时候,JVM 会退出。换句话说,守护线程拥有自动结束自己生命周期的特性,而非守护线程不具备这个特点。
JVM 中的垃圾回收线程就是典型的守护线程,如果说不具备该特性,会发生什么呢?
当 JVM 要退出时,由于垃圾回收线程还在运行着,导致程序无法退出,这就很尴尬了!!!由此可见,守护线程的重要性了。
通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 JVM 退出时,线程能够自动关闭,此时,守护线程是你的首选。
四、总结
在 Java 语言中线程分为两类:用户线程和守护线程,默认情况下我们创建的线程或线程池都是用户线程,守护线程是为用户线程服务的,当一个程序中的所有用户线程都执行完成之后程序就会结束运行,程序结束运行时不会管守护线程是否正在运行,由此我们可以看出守护线程在 Java 体系中权重是比较低的,这就是守护线程和用户线程的区别。
**守护线程(Daemon Thread)**是在后台运行的特殊线程,其生命周期依赖于创建它的线程(通常是主线程)。以下是守护线程的一些特点:
- 生命周期:守护线程的生命周期依赖于创建它的线程。当创建守护线程的线程结束时,守护线程也会随之结束,无论守护线程是否完成了它的任务。
- 后台运行:守护线程通常在后台运行,不会阻止应用程序的终止。即使守护线程仍在运行,当所有非守护线程结束时,应用程序也会终止。
- 用途:守护线程通常用于执行一些后台任务,如垃圾回收、资源管理等。这些任务无需等待用户线程完成,可以在后台持续运行。
需要注意的是,由于守护线程的生命周期不受自己控制,因此在设计守护线程时需要特别小心,确保它们能够在合适的时候结束,避免影响应用程序的正常终止。同时,守护线程也不应该持有任何关键资源,以避免在应用程序结束时导致资源泄露。