面试官: 谈谈什么是守护线程以及作用 ?
来自:小哈学Java
目录
一、什么是守护线程
二、守护线程的作用及应用场景
三、总结
一、什么是守护线程
守护线程相对于正常线程来说,是比较特殊的一类线程,那么它特殊在哪里呢?别急,在了解它之前,我们需要知道一个问题,那就是:
JVM 程序在什么情况下能够正常退出?
The Java Virtual Machine exits when the only threads running are all daemon threads.
上面这句话来自 JDK 官方文档,意思是:
当 JVM 中不存在任何一个正在运行的非守护线程时,则 JVM 进程即会退出。
理解起来有点拗口,看完下面的代码你就懂了 。^_^
①:创建一个非守护线程;
②:模拟非守护线程不退出的情况;
③:启动线程;
④:主线程即将退出;
运行这段代码,猜猜看,JVM 进程是否能够正常退出呢?
可以看到因为有一个非守护线程一直在后台运行着,JVM 无法正常退出。那么,如果说正在运行的是个守护线程,结果又会怎么样呢?
①:添加一个钩子(Hook)线程, 用来监听 JVM 退出,并输出日志;
关于 Hook (钩子) 线程可以看我之前的文章:《面试官: 什么是 Hook (钩子) 线程以及应用场景?》
②:通过
setDaemon(true)
将该线程为守护线程;
再次运行代码,瞅瞅效果:
可以看到,当主线程退出时,JVM 会随之退出运行,守护线程同时也会被回收,即使你里面是个死循环也不碍事。
二、守护线程的作用及应用场景
通过上面的示例代码,相信你已经了解了守护线程和普通线程之间的区别,那么,我们来讨论一下为什么需要守护线程,以及何时使用,它的应用场景是什么?
上面,我们已经知道了,如果 JVM 中没有一个正在运行的非守护线程,这个时候,JVM 会退出。换句话说,守护线程拥有自动结束自己生命周期的特性,而非守护线程不具备这个特点。
JVM 中的垃圾回收线程就是典型的守护线程,如果说不具备该特性,会发生什么呢?
当 JVM 要退出时,由于垃圾回收线程还在运行着,导致程序无法退出,这就很尴尬了!!!由此可见,守护线程的重要性了。
通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 JVM 退出时,线程能够自动关闭,此时,守护线程是你的首选。
三、总结
本文中,我们学习了什么是守护线程,通过示例代码了解了守护线程的特性,以及守护线程的作用,和应用场景。最后,如果看完此文有所收获,不妨点个关注哈。
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
长按订阅更多精彩▼如有收获,点个在看,诚挚感谢
面试官: 谈谈什么是守护线程以及作用 ?相关推荐
- 面试官问:为什么 Java 线程没有Running状态?我懵了
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 title: 面 ...
- 面试官:谈谈分库分表吧?
面试官:"有并发的经验没?" 应聘者:"有一点." 面试官:"那你们为了处理并发,做了哪些优化?" 应聘者:"前后端分离 ...
- 联合索引会创建几个索引_面试官:谈谈你对mysql联合索引的认识?
引言 这篇文章作为<面试官:谈谈你对mysql索引的认识>的续篇,我当时在写这篇的时候,考虑到篇幅问题所以略去了联合索引的内容,今天给大家补上. 本文预计分为两个部分:(1)联合索引部分的 ...
- 面试官让我讲下线程的WAITING状态,我笑了
转载自 面试官让我讲下线程的WAITING状态,我笑了 面试官Q:你讲下线程状态中的WAITING状态,什么时候会处于这个状态?什么时候离开这个状态? 小菜J 会心一笑... 一个正在无限期等待另一 ...
- 面试官问:为什么 Java 线程没有 Running 状态?我懵了
转载自 面试官问:为什么 Java 线程没有 Running 状态?我懵了 什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNN ...
- 面试官让我讲下线程的TIMED_WAITING状态,我又笑了
转载自 面试官让我讲下线程的TIMED_WAITING状态,我又笑了 面试官Q:你讲下线程状态中的WAITING状态,什么时候会处于这个状态?什么时候离开这个状态? 小菜J 会心一笑,可以撮这里 - ...
- java线程池原理简答_面试官让我讲讲Java线程池的实现原理,我笑了...
期待与你,一起进步 随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力.所以,多线程技术是服务端开发人员必须掌握的技术. 线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就 ...
- 面试官问我:创建线程有几种方式?我笑了
前言 多线程在面试中基本上已经是必问项了,面试官通常会从简单的问题开始发问,然后再一步一步的挖掘你的知识面. 比如,从线程是什么开始,线程和进程的区别,创建线程有几种方式,线程有几种状态,等等. 接下 ...
- 如何把class里的vector结构体memcpy出来_面试官:请说出线程安全的 ArrayList 有哪些,除了Vector...
以下环境是 JDK 1.8 ArrayList 的初始容量 面试官:你看过 ArrayList 的源码? Python 小星:看过 面试官:那你说下ArrayList 的初始容量是多少? Python ...
最新文章
- 边沿检测与信号同步?
- 一些今天看到的好句子
- 我来告诉你优秀的产品经理是如何管理需求的
- hiho1482出勤记录II(string类字符串中查找字符串,库函数的应用)
- 多层GCN的over-smooth问题
- django下创建多个app,如何设置每个app的urls
- 2017-02-26,周日整理
- vs关于_CRT_SECURE_NO_WARNINGS警告说明
- 读书百客:《渔家傲·天接云涛连晓雾》评赏
- 数据分析的同比和环比以及其在excel中的应用
- 1003【顺序结构】A+B 问题
- 关于不定积分和积分上限函数区别的简单讨论
- 外星人入侵小游戏十二章十三章实现
- NLP papers
- 分享一个H5使用JQ首字母排序的通讯录
- 冒泡排序(代码+解析)
- 【毕业生】简历究竟应该怎么“写”?
- Python笔记-爬取Boss直聘的招聘信息
- 2读1写通用寄存器堆设计实现
- 关于Java面向对象程序设计原则之一——开闭原则的思考与分享
热门文章
- linux的ftp226,ftp服务器 不返回 226
- 【python】向上取整 向下取整
- linux 磁盘分区情况6,Linux磁盘分区介绍
- 如何在python中创建列表副本,在Python中切片列表而不生成副本
- python环境问题踩坑
- Unreal Engine* 4.19 的 CPU 功能检测
- 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
- 2014.09线上课堂报名帖:敏捷个人手机应用使用
- new操作符具体干了啥
- Spring中ThreadPoolTaskExecutor的线程调度及问题