位置: IT常识 - 正文

Java守护线程(java守护线程和本地线程区别)

编辑:rootadmin
Java中,通过Thread类,我们可以创建2种线程,分为守护线程和用户线程。 守护线程是所有非守护线程的保姆,当所有非守护线程执行完成或退出了,即使还有守护线程在运行,JVM也会直接退出,因此守护线程通常是用来处理一些辅助工作。 反之,对于非守护线程,只要有一个在运行,JVM就不会退出。 典型的守 ...

Java中,通过Thread类,我们可以创建2种线程,分为守护线程和用户线程。

守护线程是所有非守护线程的保姆,当所有非守护线程执行完成或退出了,即使还有守护线程在运行,JVM也会直接退出,因此守护线程通常是用来处理一些辅助工作。

反之,对于非守护线程,只要有一个在运行,JVM就不会退出。

典型的守护线程如垃圾回收GC线程,当用户线程都结束后,GC也就没有单独存在的必要,JVM直接退出。

我们可以通过Thread对象的setDaemon(boolean on)方法设置是否为守护线程,要在start之前设置:

Thread thread = new Thread(runnable);thread.setDaemon(true); // true表示守护线程,false表示用户线程thread.start();

需要注意的是,如果没有显示调用setDaemon方法进行设置,线程的模式是取决于父线程是否为守护线程,也就是创建此线程所在的线程。

如果父线程是守护线程,创建的线程默认是守护线程;

如果父线程是用户线程,创建的线程默认是用户线程。

这可以从Thread类的init方法源代码中看出:

Thread parent = currentThread();this.daemon = parent.isDaemon();

对于daemon的设置,保存在了Thread对象的成员变量中,Thread提供了setter/getter:

private boolean daemon = false;//是否为守护线程public final void setDaemon(boolean on) {//SecurityManager安全检查,本文不展开讨论checkAccess();//检查线程是否已启动,已启动无法设置daemonif (isAlive()) {throw new IllegalThreadStateException();}daemon = on;}public final boolean isDaemon() {return daemon;}

setDaemon方法中通过isAlive判断线程是否已启动,已启动状态下不允许修改,抛出IllegalThreadStateException异常。

接着我们用示例来验证一下守护线程和非守护线程的区别。

以下是守护线程示例:

Thread t = new Thread(() -> {System.out.println("before");ThreadUtil.sleep(5000);System.out.println("after");});//显式设置daemon为truet.setDaemon(true);t.start();ThreadUtil.sleep(1000);System.out.println("exit");

输出:

beforeexit

可以发现,当线程设置为守护线程后,主线程一旦执行完毕,程序退出,守护线程也随着立即终止。

以下是非守护线程示例:

Thread t = new Thread(() -> {System.out.println("before");ThreadUtil.sleep(5000);System.out.println("after");});//显式设置daemon为falset.setDaemon(false);t.start();ThreadUtil.sleep(1000);System.out.println("exit");

输出:

beforeexitafter

虽然主线程已经执行完毕,但创建的非守护线程还在运行。

具体JVM是如何通过daemon字段控制线程的,这在JDK中找不到相应源码,需要深入hotspot C++源码进行分析,后续有必要再追加更新。

本文链接地址:https://www.jiuchutong.com/zhishi/310482.html 转载请保留说明!

上一篇:织梦dedecms首页列表页获取文章带链接tag标签(织梦官方网站)

下一篇:帝国cms如何解决截图出现黑边的问题(帝国cms使用手册)

  • 网络推广如何抓取流量,网络推广员集中推广方式(网络推广如何抓客户)

    网络推广如何抓取流量,网络推广员集中推广方式(网络推广如何抓客户)

  • qq音乐怎么踢掉其他设备登录(qq音乐怎么踢掉别的设备)

    qq音乐怎么踢掉其他设备登录(qq音乐怎么踢掉别的设备)

  • 电脑怎么息屏但是不关机

    电脑怎么息屏但是不关机

  • 微博提示音怎么设置(微博提示音怎么设置自己喜欢的)

    微博提示音怎么设置(微博提示音怎么设置自己喜欢的)

  • 学cad需要什么基础(学cad需要基础吗)

    学cad需要什么基础(学cad需要基础吗)

  • 手机删除的照片在哪里可以找到(手机删除的照片都去哪里了)

    手机删除的照片在哪里可以找到(手机删除的照片都去哪里了)

  • 苹果手机能上两个微信吗(苹果手机能上两个微信号吗怎么弄)

    苹果手机能上两个微信吗(苹果手机能上两个微信号吗怎么弄)

  • 抖音无效视频是什么意思(抖音无效视频是什么原因)

    抖音无效视频是什么意思(抖音无效视频是什么原因)

  • 华为手机右上角有个月亮是怎么回事(华为手机右上角特殊图标详解)

    华为手机右上角有个月亮是怎么回事(华为手机右上角特殊图标详解)

  • 串口调试助手是干嘛的(串口调试助手是用什么写的)

    串口调试助手是干嘛的(串口调试助手是用什么写的)

  • com.tencent.mm是什么文件夹(com.tencent.mm可以删吗)

    com.tencent.mm是什么文件夹(com.tencent.mm可以删吗)

  • 抖音音浪和抖币的区别(抖音音浪和抖币哪个划算)

    抖音音浪和抖币的区别(抖音音浪和抖币哪个划算)

  • 怎样下载电视剧(怎样下载电视剧到手机相册)

    怎样下载电视剧(怎样下载电视剧到手机相册)

  • 手机有网为什么微信发不出去消息(手机有网为什么显示无法连接网络)

    手机有网为什么微信发不出去消息(手机有网为什么显示无法连接网络)

  • 苹果11有暗夜绿色吗(苹果11有暗夜绿这个颜色吗)

    苹果11有暗夜绿色吗(苹果11有暗夜绿这个颜色吗)

  • 微信头像模糊咋回事(微信头像模糊咋弄)

    微信头像模糊咋回事(微信头像模糊咋弄)

  • 手机投屏到小度在家(手机投屏到小度在家1c)

    手机投屏到小度在家(手机投屏到小度在家1c)

  • 小米5屏幕参数(小米5屏幕参数配置)

    小米5屏幕参数(小米5屏幕参数配置)

  • 闲聊软件怎么设置声音(闲聊怎么设置提示声音)

    闲聊软件怎么设置声音(闲聊怎么设置提示声音)

  • 朋友圈个签怎么居中(朋友圈个签怎么设置到中间)

    朋友圈个签怎么居中(朋友圈个签怎么设置到中间)

  • oppoa5的呼吸灯怎么设置(oppoa59s呼吸灯)

    oppoa5的呼吸灯怎么设置(oppoa59s呼吸灯)

  • 苹果xs港行支持电信吗(苹果xs港行支持电信卡吗)

    苹果xs港行支持电信吗(苹果xs港行支持电信卡吗)

  • 快手上我设置了特别关注为什么找不到了(快手我设置了隐私账户,还能看到好友的作品吗)

    快手上我设置了特别关注为什么找不到了(快手我设置了隐私账户,还能看到好友的作品吗)

  • 微信单个表情怎么删除(微信单个表情怎么制作)

    微信单个表情怎么删除(微信单个表情怎么制作)

  • 帝国cms栏目可以绑定域名吗(帝国cms栏目可以看吗)

    帝国cms栏目可以绑定域名吗(帝国cms栏目可以看吗)

  • 用于非增值税应税项目、免征增值税项目
  • 何谓关税
  • 企业所得税季度申报时间
  • 建筑公司购入的水泥等材料如果是做成本的怎么做分录
  • 未达起征点销售额和小微企业免税销售额
  • 专用发票压线了可以拒收吗
  • 酒店开办费
  • 美容行业如何做活动
  • 劳务费发票是个人开还是公司开
  • 现金形式发放的福利需要扣税吗
  • 增值税进项税额不予抵扣的项目包括
  • 其他公司向本企业借款
  • 固定资产清理科目怎么结转
  • 取得转账支票后该如何处理
  • 注册公司买车划算吗
  • 2018年老项目应该如何交税?
  • 绿化工程企业所得税减免吗
  • 普票记账联可以报销吗
  • 建筑业商业保险受益人可以是公司吗
  • 免抵退税应退税额
  • 本年利润年末怎么结转到利润分配
  • 营业外收入不纳税?
  • 小规模纳税人免征增值税怎么记账
  • 如何按增值税计税
  • 关于研发支出的报告
  • 母公司是否应替子公司承担违约责任
  • 开具信息咨询费的发票
  • 怎样让鼠标变得好看些
  • 如何在win7系统中查看电脑基本信息
  • laravel跨库查询
  • php扩展编写
  • PHP验证信用卡卡号是否正确函数
  • 咨询公司流程完整
  • RuntimeError: (PreconditionNotMet) The third-party dynamic library (cudnn64_7.dll) that Paddle depen
  • 存货怎么预估
  • vue ng
  • 成本法转为权益法例题
  • 本地部署stable diffusion需要什么显卡
  • thinkphp addons
  • 递归 php
  • json解析漏洞
  • jquery 元素
  • java基础变量字节
  • 一定要确认收入的时候才能开票吗
  • 购买金税盘的费用会计分录
  • 支付兼职工资账务处理
  • 当月增加的固定资产当月不计提折旧
  • 营业执照类型的区别是什么
  • 注销公司怎么搞
  • 资质使用费怎么收
  • 公司活动赠送小礼品
  • 错开发票所需要提供的资料和时效要求是?
  • 其他应收款增加会计分录
  • 工商年报纳税总额从哪看
  • 残保金提取是什么意思
  • 应收账款调增调减?
  • 办公室搬迁工作
  • 小规模纳税人结转增值税的账务处理
  • 预提短期借款利息的会计科目
  • 季度的工会经费怎么算
  • 混合销售行为的概念
  • 企业和职工之间的财务关系属于
  • 从mysql导出数据
  • win2003回收站
  • exe什么意思?
  • window如何删除输入法
  • win10允许访问
  • windows xp的控制面板
  • win7系统c盘占用空间大
  • Win10年度升级版将正式提供暗黑主题 未自定义颜色都会变暗
  • vue mint-ui 官网
  • node.js 环境配置
  • unity uma
  • pythonjam怎么用
  • javascript中函数的作用域分为全局作用域
  • javascript整数类型
  • 国家税务总局青海省税务局
  • 福建税务局网上办税
  • 国税湖南电子税务局官网
  • 社保每个月都要交吗,不交了会怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设