Java 守护线程_动力节点Java学院整理
发布时间 - 2026-01-11 01:23:43 点击率:次估计学过Unix开发但是没有细致学习Java的同学们会疑惑了,操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制是构建在JVM的基础之上的,意思是Java平台把操作系统的底层给屏蔽起来,所以它可以在它自己的虚拟的平台里面构造出对自己有利的机制,而语言或者说平台的设计者多多少少是收到Unix思想的影响,而守护线程机制又是对JVM这样的平台凑合,于是守护线程应运而生。

Daemon的作用是为其他线程的运行提供服务,比如说GC线程。其实User Thread线程和Daemon Thread守护线程本质上来说去没啥区别的,唯一的区别之处就在虚拟机的离开:如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了。
守护线程并非虚拟机内部可以提供,用户也可以自行的设定守护线程,方法:public final void setDaemon(boolean on) ;但是有几点需要注意:
1)、thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。 (备注:这点与守护进程有着明显的区别,守护进程是创建后,让进程摆脱原会话的控制+让进程摆脱原进程组的控制+让进程摆脱原控制终端的控制;所以说寄托于虚拟机的语言机制跟系统级语言有着本质上面的区别)
2)、 在Daemon线程中产生的新线程也是Daemon的。 (这一点又是有着本质的区别了:守护进程fork()出来的子进程不再是守护进程,尽管它把父进程的进程相关信息复制过去了,但是子进程的进程的父进程不是init进程,所谓的守护进程本质上说就是“父进程挂掉,init收养,然后文件0,1,2都是/dev/null,当前目录到/”)
3)、不是所有的应用都可以分配给Daemon线程来进行服务,比如读写操作或者计算逻辑。因为在Daemon Thread还没来的及进行操作时,虚拟机可能已经退出了。
例子:
//完成文件输出的守护线程任务
import java.io.*;
class TestRunnable implements Runnable{
public void run(){
try{
Thread.sleep(1000);//守护线程阻塞1秒后运行
File f=new File("daemon.txt");
FileOutputStream os=new FileOutputStream(f,true);
os.write("daemon".getBytes());
}
catch(IOException e1){
e1.printStackTrace();
}
catch(InterruptedException e2){
e2.printStackTrace();
}
}
}
public class TestDemo2{
public static void main(String[] args) throws InterruptedException
{
Runnable tr=new TestRunnable();
Thread thread=new Thread(tr);
thread.setDaemon(true); //设置守护线程
thread.start(); //开始执行分进程
}
}
运行结果:文件daemon.txt中没有"daemon"字符串。
但是如果把thread.setDaemon(true); //设置守护线程注释掉,文件daemon.txt是可以被写入daemon字符串的
JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态,因此,在使用后台线程候一定要注意这个问题。
但是daemon Thread实际应用在那里呢?举个例子,web服务器中的Servlet,容器启动时后台初始化一个服务线程,即调度线程,负责处理http请求,然后每个请求过来调度线程从线程池中取出一个工作者线程来处理该请求,从而实现并发控制的目的。
网上摘的一个图,方便大家理解:
以上所述是小编给大家介绍的Java 守护线程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java
# 守护线程
# Java并发编程示例(七):守护线程的创建和运行
# Java线程之守护线程(Daemon)用法实例
# 浅谈java的守护线程与非守护线程
# 浅谈java中守护线程与用户线程
# 简单了解Java编程中线程的创建与守护线程
# Java守护线程实例详解_动力节点Java学院整理
# Java语言多线程终止中的守护线程实例
# 详解Java线程-守护线程与用户线程
# 【java 多线程】守护线程与非守护线程的详解
# Java后台线程操作示例【守护线程】
# Java守护线程用法实例分析
# 出了
# 又是
# 也就
# 小编
# 没啥
# 自己的
# 都是
# 操作系统
# 就在
# 在此
# 之处
# 在那里
# 这个问题
# 你不
# 给大家
# 同学们
# 相关信息
# 几点
# 它可以
# 应运而生
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何用花生壳三步快速搭建专属网站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Angular 表单中正确绑定输入值以确保提交与验证正常工作
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何登录建站主机?访问步骤全解析
如何在宝塔面板中创建新站点?
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
详解阿里云nginx服务器多站点的配置
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何快速生成专业多端适配建站电话?
Android自定义listview布局实现上拉加载下拉刷新功能
Windows Hello人脸识别突然无法使用
网站建设要注意的标准 促进网站用户好感度!
如何在新浪SAE免费搭建个人博客?
,网页ppt怎么弄成自己的ppt?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
香港服务器租用费用高吗?如何避免常见误区?
在线制作视频网站免费,都有哪些好的动漫网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
如何解决hover在ie6中的兼容性问题
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何在万网ECS上快速搭建专属网站?
Laravel怎么实现模型属性的自动加密
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
PythonWeb开发入门教程_Flask快速构建Web应用
如何快速建站并高效导出源代码?
EditPlus中的正则表达式实战(6)
JavaScript模板引擎Template.js使用详解
如何自定义建站之星网站的导航菜单样式?
Android实现代码画虚线边框背景效果
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
如何在自有机房高效搭建专业网站?
如何自定义建站之星模板颜色并下载新样式?
如何在阿里云通过域名搭建网站?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件

