博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 什么是守护线程
阅读量:3935 次
发布时间:2019-05-23

本文共 913 字,大约阅读时间需要 3 分钟。

前言

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

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

 

posted @ 2019-03-11 15:08 阅读(...) 评论(...)

转载地址:http://lthgn.baihongyu.com/

你可能感兴趣的文章
阿里开源在线诊断工具-Arthas(阿尔萨斯)
查看>>
kubernetes(整理中)
查看>>
Deepin 下安装 Docker
查看>>
Github骚操作(转)
查看>>
滴滴出行基于RocketMQ的改造分享(转)
查看>>
redis之lua整理
查看>>
alibaba-nacos之config、discovery
查看>>
介绍Jib - 更好地构建Java Docker镜像(转)
查看>>
Spring cloud 技术文档汇总(收集)
查看>>
nacos-config源码分析
查看>>
nacos-discovery源码分析
查看>>
HttpClient请求外部服务器NoHttpResponseException
查看>>
springCloud升级到Finchley.RELEASE,SpringBoot升级到2.0.4
查看>>
Spring boot + Arthas
查看>>
omitted for duplicate jar包冲突排查
查看>>
如何保证缓存与数据库的双写一致性?
查看>>
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy排查
查看>>
深浅拷贝,深浅克隆clone
查看>>
Java基础零散技术(笔记)
查看>>
Mysql优化sql排查EXPLAIN EXTENDED
查看>>