Java 什么是守护线程
2024-09-04 00:10:25
前言
守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程,这是它的作用——而其他的线程只有一种,那就是用户线程。所以java里线程分2种,
1、守护线程,比如垃圾回收线程,就是最典型的守护线程。
2、用户线程,就是应用程序里的自定义线程。
守护线程
1、守护线程,专门用于服务其他的线程,如果其他的线程(即用户自定义线程)都执行完毕,连main线程也执行完毕,那么jvm就会退出(即停止运行)——此时,连jvm都停止运行了,守护线程当然也就停止执行了。
2、再换一种说法,如果有用户自定义线程存在的话,jvm就不会退出——此时,守护线程也不能退出,也就是它还要运行,干嘛呢,就是为了执行垃圾回收的任务啊。
3、守护线程又被称为“服务进程”“精灵线程”“后台线程”,是指在程序运行是在后台提供一种通用的线程,这种线程并不属于程序不可或缺的部分。 通俗点讲,任何一个守护线程都是整个JVM中所有非守护线程的“保姆”。
用户自定义线程
1、应用程序里的线程,一般都是用户自定义线程。
2、用户也可以在应用程序代码自定义守护线程,只需要调用Thread类的设置方法设置一下即可。
3、用户线程和守护线程几乎一样,唯一的不同之处就在于如果用户线程已经全部退出运行,只剩下守护线程存在了,JVM也就退出了。 因为当所有非守护线程结束时,没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了,程序也就终止了,同时会“杀死”所有守护线程。 也就是说,只要有任何非守护线程还在运行,程序就不会终止。
在Java语言中,守护线程一般具有较低的优先级,它并非只由JVM内部提供,用户在编写程序时也可以自己设置守护线程,例如将一个用户线程设置为守护线程的方法就是在调用start()方法启动线程之前调用对象的setDaemon(true)方法,若将以上括号里的参数设置为false,则表示的是用户进程模式。
需要注意的是,当在一个守护线程中产生了其它线程,那么这些新产生的线程默认还是守护线程,用户线程也是如此。
最新文章
- C#利用反射机制创建对象
- 自动生成.py文件头部的C语言小程序
- Web API与国际化
- poj1655 树的重心 树形dp
- 在jQuery和JavaScript中,实现转跳
- input 文本框和 img 验证码对齐问题
- The Class Loader Hierarchy--转载
- HDOJ(HDU) 1785 You Are All Excellent(角度运算)
- ASP.NET MVC 中将FormCollection与实体间转换方法【转】
- 《C程序设计语言》 squeeze函数(从字符串s中删除字符c)
- Varnish Cache
- 添加Glide图片加载框架依赖
- PHP中数字检测is_numeric与ctype_digit的区别介绍
- php多路复用(多线程)socket相关应用
- spring读取配置文件内容并自动注入
- 【转】 jquery easyui Tab 引入页面的问题
- Spring Boot使用Log4j Implemented Over SLF4J生成日志并在控制台打印
- Object 转换为 BigDecimal
- JXL导出Excel工具类
- Java游戏服务器成长之路——弱联网游戏篇(源码分析)
热门文章
- getchar返回int类型
- OneinStack定时同步备份数据库/网站至七牛云存储方法
- Maven下载清除jar包
- Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
- IDEA创建maven的web项目时,main文件夹下没有java,resources目录等源文件夹
- msdn帮助,离线下载
- 用户在浏览器输入URL或者跳转到一个URL后发生了什么
- Linux架构之Nginx 动静分离
- 2019 Multi-University Training Contest 4 1008K-th Closest Distance(二分+主席树)
- AlphaStar: Mastering the Real-Time Strategy Game StarCraft II 博客要点