欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java中守护线程介绍及使用

时间:2022-09-12 10:16:11|栏目:JAVA代码|点击:

一、什么是守护线程

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

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

二、为什么需要守护线程

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

The Java Virtual Machine exits when the only threads running are all daemon threads.

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

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

在这里插入图片描述

在这里插入图片描述

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

三、如何使用

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

在这里插入图片描述

在这里插入图片描述

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

注意:

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

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

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

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

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

总结

上一篇:剑指Offer之Java算法习题精讲二叉树专题篇上

栏    目:JAVA代码

下一篇:java interface的两个经典用法

本文标题:Java中守护线程介绍及使用

本文地址:http://www.codeinn.net/misctech/213500.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有