Java 中有两类线程:用户线程(User Thread)、守护线程(Daemon Thread)。
守护线程是用户线程的辅助线程。当用户线程全部退出,只剩下守护线程时,程序就会退出。
实际上,Java 程序都是多线程的,即使是最简单的“hello world”程序,除了 main 线程外,至少还有一个负责垃圾回收的线程。这个线程就是守护线程。在 main 线程结束的时候,垃圾回收线程就会退出。
用户线程和守护线程的区别在于:
-
用户线程结束后程序才会退出,而守护线程有可能还未结束,程序就退出了;
-
守护线程会在所有用户线程退出时自动退出,不需要通过代码来控制退出流程。
因此,守护线程不能用于保存数据,因为它可能在数据未保存完成就退出了。
那么守护线程到底有什么用呢?
比如输入文字,这是个用户线程, 后台还有一个拼写检查线程,它可以是个守护线程。
什么时候使用守护进程?
当用户线程需要一个辅助线程实现一些额外功能(比如拼写检查),而且在用户线程退出时,辅助线程可以立即退出而不会造成数据丢失时,可以将这个辅助线程做成守护线程。
换句话说,当用户线程退出时,辅助线程就会失去存在的意义。那么这个辅助线程就可以使用守护线程来实现。