欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中守护线程介绍及使用

程序员文章站 2022-03-08 15:01:51
目录一、什么是守护线程二、为什么需要守护线程三、如何使用注意:总结一、什么是守护线程在说守护线程之前,我们先说一下什么是用户线程。用户线程:我们平常创建的普通线程。守护线程(即 daemon thre...

一、什么是守护线程

在说守护线程之前,我们先说一下什么是用户线程。

用户线程:我们平常创建的普通线程
守护线程(即 daemon thread):是个服务线程,用来服务于用户线程;不需要上层逻辑介入,当然我们也可以手动创建一个守护线程。在jvm中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出。

二、为什么需要守护线程

存在任意一个用户线程的时候,jvm就不会退出。那么jvm 程序在什么情况下能够正常退出?

the java virtual machine exits when the only threads running are all daemon threads.

上面这句话来自 jdk 官方文档,意思是:
当 jvm 中不存在任何一个正在运行的非守护线程时,则 jvm 进程即会退出。

首先要明白,当存在任意一个用户线程的时候,jvm就不会退出

Java中守护线程介绍及使用

Java中守护线程介绍及使用

如果这个用户线程不结束,jvm进程就无法结束。这就导致一个问题:由谁负责结束这个线程?所以java就提供了守护线程(daemon thread)来帮助我们解决这一个问题。

三、如何使用

使用很简单,只是在调用start()方法前,调用setdaemon(true)把该线程标记为守护线程
如何检查一个线程是守护线程还是用户线程:使用isdaemon()方法

Java中守护线程介绍及使用

Java中守护线程介绍及使用

通过控制台的输出,我们可以看到,当主线程退出时,jvm 会随之退出运行,守护线程同时也会被回收,即使你里面是个死循环也不碍事。

注意:

thread.setdaemon(true) 必须在 thread.start() 之前设置,否则会抛出 illegalthreadstateexception 异常。在daemon线程中产生的新线程也是daemon的。 四、守护线程的作用及应用场景

在上面,我们已经知道了,如果 jvm 中没有一个正在运行的非守护线程,这个时候,jvm 会退出。

jvm 中的垃圾回收线程就是典型的守护线程。如果说不具备该特性,jvm 要退出时,由于垃圾回收线程还在运行着,导致程序无法退出。由此可见,守护线程的重要性了。

垃圾回收是一个一直需要运行的机制,但是当没有用户线程的时候,也就不需要垃圾回收线程了,守护线程刚好满足这样的需求。

通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 jvm 退出时,线程能够自动关闭,此时,守护线程是你的首选。

总结

到此这篇关于java中守护线程介绍及使用的文章就介绍到这了,更多相关java守护线程内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: Java 守护线程