前言

守护线程(即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,则表示的是用户进程模式。

需要注意的是,当在一个守护线程中产生了其它线程,那么这些新产生的线程默认还是守护线程,用户线程也是如此。

最新文章

  1. C#利用反射机制创建对象
  2. 自动生成.py文件头部的C语言小程序
  3. Web API与国际化
  4. poj1655 树的重心 树形dp
  5. 在jQuery和JavaScript中,实现转跳
  6. input 文本框和 img 验证码对齐问题
  7. The Class Loader Hierarchy--转载
  8. HDOJ(HDU) 1785 You Are All Excellent(角度运算)
  9. ASP.NET MVC 中将FormCollection与实体间转换方法【转】
  10. 《C程序设计语言》 squeeze函数(从字符串s中删除字符c)
  11. Varnish Cache
  12. 添加Glide图片加载框架依赖
  13. PHP中数字检测is_numeric与ctype_digit的区别介绍
  14. php多路复用(多线程)socket相关应用
  15. spring读取配置文件内容并自动注入
  16. 【转】 jquery easyui Tab 引入页面的问题
  17. Spring Boot使用Log4j Implemented Over SLF4J生成日志并在控制台打印
  18. Object 转换为 BigDecimal
  19. JXL导出Excel工具类
  20. Java游戏服务器成长之路——弱联网游戏篇(源码分析)

热门文章

  1. getchar返回int类型
  2. OneinStack定时同步备份数据库/网站至七牛云存储方法
  3. Maven下载清除jar包
  4. Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
  5. IDEA创建maven的web项目时,main文件夹下没有java,resources目录等源文件夹
  6. msdn帮助,离线下载
  7. 用户在浏览器输入URL或者跳转到一个URL后发生了什么
  8. Linux架构之Nginx 动静分离
  9. 2019 Multi-University Training Contest 4 1008K-th Closest Distance(二分+主席树)
  10. AlphaStar: Mastering the Real-Time Strategy Game StarCraft II 博客要点