Java用户线程和守护线程,线程默认Daemon值是false吗?

news2025/1/10 16:13:36

文章目录

    • 用户线程
    • 守护线程
    • 必须要在start()方法之前设置守护线程
    • 线程默认的daemon值
    • 总结

Java中通常有两种线程: 用户线程守护线程(也被称为服务线程)
通过 Thread.setDaemon(false)设置为 用户线程(默认为用户线程)
通过 Thread.setDaemon(true)设置为 守护线程
线程属性的设置要在线程启动 之前,否则会报 IllegalThreadStateException异常

用户线程

public static void main(String[] args) {
    Thread thread = new Thread(()->{
        System.out.println("开始执行:" + Thread.currentThread().getName());
        while (true){

        }
    }, "t1");
    thread.start();
    System.out.println("主线程结束");
}

运行结果如下:

在这里插入图片描述

可以看到主线程已经结束,但程序确无法退出。因为t1线程是用户线程,里边是一个死循环使线程一直处于运行状态,所以无法结束

守护线程

public static void main(String[] args) {
    Thread thread = new Thread(()->{
        System.out.println("开始执行:" + Thread.currentThread().getName());
        while (true){

        }
    }, "t1");
    thread.setDaemon(true);
    thread.start();
    System.out.println("主线程结束");
}

运行结果如下:

在这里插入图片描述

通过thread.setDaemon(true)设置t1线程为守护线程,程序随着主线程的结束而结束

结论:当程序中所有的用户线程执行完毕之后,不管守护线程是否结束,系统都会自动退出。

必须要在start()方法之前设置守护线程

在这里插入图片描述

源码里也有声明,必须在线程启动之前调用setDaemon方法。

在这里插入图片描述

守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程JIT线程都是守护线程。与之对应的是用户线程用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,Java虚拟机会自动退出

线程默认的daemon值

首先看一下创建线程源码,Thread类的init()方法

在这里插入图片描述

在这里插入图片描述

也就是说线程的daemon的默认值取决于父线程的daemon值,当父线程为用户线程,子线程默认是用户线程,当父线程为守护线程时 子线程也为守护线程。

示例代码

public static void main(String[] args) throws InterruptedException {
    Thread thread = new Thread(()->{
        System.out.println("t1 isDaemon:" + Thread.currentThread().isDaemon());
    }, "t1");
    thread.start();
    System.out.println("主线程 isDaemon:" + Thread.currentThread().isDaemon());

    TimeUnit.SECONDS.sleep(2);
}

运行结果:

在这里插入图片描述

t1线程是由main方法所在的线程创建的,主线程是t1的父线程,主线程为用户线程,所以t1.isDaemonfalse,两个都为用户线程


示例代码2

public static void main(String[] args) throws InterruptedException {
    Thread thread = new Thread(()->{
        System.out.println("t1 isDaemon:" + Thread.currentThread().isDaemon());
        new Thread(()->{
            System.out.println("t2 isDaemon:" + Thread.currentThread().isDaemon());
        }, "t2").start();
    }, "t1");
    thread.setDaemon(true);
    thread.start();
    System.out.println("主线程 isDaemon:" + Thread.currentThread().isDaemon());

    TimeUnit.SECONDS.sleep(2);
}

运行结果:

在这里插入图片描述

t1线程手动设置了为守护线程,t1线程为t2线程的父线程,线程是否为守护线程默认取决于父线程的值,也就是说t2默认线程类型和t1一样的,都为守护线程。

总结

  1. java中的线程分为用户线程守护线程(ps:还有虚拟线程也叫协程)
  2. 程序中的所有的用户线程结束之后,不管守护线程处于什么状态,java虚拟机都会自动退出
  3. 调用线程的实例方法setDaemon()来设置线程是否是守护线程
  4. setDaemon()方法必须在线程的start()方法之前调用,在后面调用会报异常,并且不起效
  5. 线程的daemon默认值和其父线程一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【鸿蒙应用开发系列】- 应用置灰方案实现讲解

在某些特殊的日子里,有时候需要对应用进行一个置灰显示处理,在Android中,提供了一些很方便的方法,可以对控件或者应用进行灰色的展示 Android应用置灰方式 1、使用灰色主题皮肤(这个开发量比较大) 2、图…

LOAM论文阅读

1. 摘要 本文提出一种实现激光雷达里程计与建图方法,使用6自由度的双轴激光雷达进行距离测量。问题的难点在于激光雷达的每一个点的时间戳都不同,运动估计的误差会影响激光点云的配准。目前相关的3D地图一般使用离线批处理方法构建,且使用闭…

回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出

回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出 目录回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出预测效果基本介绍程序设计参考资料预测效果 基本介绍 麻雀搜索算法(Sparrow Search Algorithm, SSA)是于…

2_Oracle_手工建库

一、手工建库的目的 1、方便理解Oracle的体系结构 2、更快更好的创建数据库 3、方便了解建库的每步细节 4、手工建库的实用性 二、dbca生成的脚本 /app/oracle/admin/orcl/scripts/ orcl.sh #!/bin/sh OLD_UMASKumask umask 0027 mkdir -p /app/oracle/admin/orcl/adump mkdi…

2022年度调味品十大热门品牌排行

调味品行业总量大,种类繁多,需求量大,且调味品作为生活必需品,与饮食文化紧密联系,也与人们的生活息息相关,如近日各省陆续全面放开后,也出现了北方抢黄头罐头南方抢醋的风潮。总体来说&#xf…

C++11后的常用容器和迭代器

文章目录一、string容器二、vector容器三、list容器1.构造函数2.特性操作3.元素操作4.赋值操作5.交换、反转、排序、归并6.比较操作7.插入和删除五、pair键值对四、map容器1.红黑树(平衡二叉排序树)2.构造函数3.特性操作4.元素操作5.赋值操作6.交换操作7…

Docker学习笔记5(狂神)

Docker网络: 我们学习docker的网络首先要删除我们所有的镜像: 我们发现我们有这么多的镜像。 我们现在来安装一下tomcat: linux能够ping通docker容器内部 再次测试ip addr 我们再启动一个容器测试: 发现又多了一对网卡。 3.我们来…

条件执行指令 CMP

CMP可以比较两个数的关系&#xff0c;其本质就是一条减法指令&#xff0c;只是不会将运算结果保存到寄存器&#xff0c;因为对于CPU而言&#xff0c;比较两个数时只关心结果是false还是true 指令格式&#xff1a;CMP <第一操作寄存器> <第二操作数> 第一操作寄…

【渐进式:深度光谱变换】

P2Sharpen: A progressive pansharpening network with deep spectral transformation &#xff08;P2Sharpen&#xff1a;一种具有深度光谱变换的渐进式全色锐化网络&#xff09; 大多数现有的基于深度学习方法pansharpening的监督任务仅仅依靠伪ground-truth多光谱图像,展示…

【猿如意】猿如意初用之感及editplus工具解绍

​​​​​​【猿如意】猿如意初用之感及editplus工具解绍 目录 一、猿如意初用之感 二、editplus工具下载安装渠道 三、工具介绍 四、功能介绍首先&#xff0c;EditPlus是一套功能强大的文本编辑器。 五、软件截图 六、软件安装过程 6.1在猿如意中的下载步骤 七、使用…

升级JSONB列式存储,Hologres助力淘宝搜索2022双11降本增效!

作者&#xff1a;陆晨炜&#xff08;花名遣云&#xff09;阿里巴巴智能引擎事业部数据开发 前言&#xff1a; 2022年的双11&#xff0c;阿里淘宝搜推集群承载上千万每秒的的流量峰值&#xff0c;消费者的每一次浏览、点击都通过搜推集群进行流转&#xff0c;与往年双11不同的…

[附源码]Python计算机毕业设计高校学生心理健康信息咨询系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

万字长文——MySQL基础一篇打通

准备工作 直接使用MySQL提供的数据&#xff0c;下载MySQL示例数据库 MySQL示例数据库模式由以下表组成&#xff1a; Customers&#xff1a;存储客户的数据。Products&#xff1a;存储比例模型车列表。ProductLines&#xff1a;存储产品系列类别列表。Orders&#xff1a;存储…

Web(九)JavaScript概述-JavaSript知识训练-入门基础

1、JavaScript是运行在( B)的脚本语言。 A、 服务器端 B、 客户端 C、 在服务器运行后&#xff0c;把结果返回到客户端 D、 在客户端运行后&#xff0c;把结果返回到服务端 2、JavaScript代码通常是用&#xff08; D&#xff09;标签嵌入到html文档的。 A、 JavaScript B、 La…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.5 查询Tomcat【实现查询】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.5 查询Tomcat【实现查询】48.5.1 使用Http函数查询数据48 多级缓存 48.5 查询Tomcat【…

docker容器监控

docker容器监控 一、docker介绍 Docker的中文意思就是码头工人&#xff0c;进入到Docker的官方网站后&#xff0c;也可以看到Docker的图标&#xff0c;如下图所示。 这个Docker图标上就是一条鲸鱼&#xff0c;上面有很多集装箱&#xff0c;集装箱就相当于虚拟环境&#xff0c…

股票信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

基于java+springmvc+mybatis+vue+mysql的志愿者招募网站

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把志愿者招募管理与现在网络相结合&#xff0c;利用java技术建设志愿者招募网站&#xff0c;后端使用ssm框架&#xff0c;前端使用vue技术&#xff0c;实现志愿者招募的信息化。对于进一步提高志愿者招募管理发展&#xf…

【Java寒假打卡】Java基础-面向对象

【Java寒假打卡】Java基础-面向对象一、面向对象和面相过程二、类的定义三、对象的使用四、手机类的创建和使用五、单个对象的内存图六、两个引用指向同一内存图七、成员变量和局部变量八、priavte九、this关键字十、封装十一、构造方法十二、标准类一、面向对象和面相过程 对象…

童年辣条神话卫龙,首日破发“辣条第一股”,跌超10亿

“辣条第一股”的神话破了&#xff1f; 今日&#xff08;12月15日&#xff09;“辣条大王”卫龙美味全球控股有限公司&#xff08;下称“卫龙”&#xff0c;09985.HK&#xff09;正式挂牌港交所&#xff0c;但上市首日即遭破发。 作为千禧一代撑起的童年“神话”&#xff0c;…