Java 守护线程

news2024/11/17 8:57:06

✨✨hello,愿意点进来的小伙伴们,你们好呐!
🐻🐻系列专栏:【JavaEE初阶】
🐲🐲本篇内容:详解守护线程
🐯🐯作者简介:一名现大二的三非编程小白,日复一日,仍需努力。

  • Daemon 线程 介绍:
  • Daemon 线程的 构造:
  • 演示 Daemon 线程 :
  • Daemon 线程 注意事项:

Daemon 线程 介绍:

Daemon 线程 就是 我们经常听说到的 守护线程
🚗🚗🚗
该Daemon 线程 是一个支持型的线程 , 可以理解为Daemon 线程 支持了Java程序进程的后台调度, 只要在 程序中只存在Daemon 线程 执行,那么该程序就会退出程序,并销毁进程

🚓🚓🚓
相反的是当一个程序存在非Daemon 线程 时,那么这个程序就会等待非Daemon 线程 执行结束后再销毁进程

Daemon 线程的 构造:

🚕🚕🚕
Daemon 线程 是我们在创建线程的时候设置的,只有在启动线程之前设置,无法在启动线程后设置

Daemon 线程 是通过 setDaemon(true) 方法来设置的

在这里插入图片描述

演示 Daemon 线程 :

🚙🚙🚙
接下来我们来看看守护线程与非守护线程的区别

先来看看非守护线程:

public class ThreadDemo26 {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println("设置守护线程");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "Daemon");
/*        thread.setDaemon(true);*/
        thread.start();
    }
}

🚌🚌🚌
我们没有使用设置 Daemon 线程的方法,这个时候线程的运行就会发现,输出正常输出,且使用 jconsole 工具也可以看得到进程与线程正在执行
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
那这个时候除了我们创建的线程外为什么还有那么多线程呢?

其实这些线程都是JVM自带的线程,当一个进程创建的时候,就会有这些线程的创建,随着进程的执行结束,这些线程就随着销毁,由此可见,这些由JVM自带的线程都是 Daemon线程,不会影响进程的结束

在这里插入图片描述

🚐🚐🚐
接下来我们来`设置Daemon线程来观察一下会发生哪些变化

public class ThreadDemo26 {
    public static void main(String[] args) {

        Thread thread = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println("设置守护线程");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "Daemon");
        thread.setDaemon(true);
        thread.start();
    }

}

我们会发现,运行程序后,好像就程序直接结束了,然后在 jconsole 工具也找不到进程了
其实这个时候,在main线程中调用了Daemon线程,然后main线程结束后,Daemon线程又是守护线程,那么这个时候Daemon线程不会阻止进程的结束执行,所以进程就结束了,相对着,Daemon线程也是销毁的

🚎🚎🚎
Daemon线程随之main线程的执行完毕而终止
在这里插入图片描述
在这里插入图片描述

Daemon 线程 注意事项:

🚒🚒🚒
构建 Daemon线程还需要注意一点:
不能依靠finally块来做释放资源的操作;

public class ThreadDemo26 {
    public static void main(String[] args) {

        Thread thread = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println("设置守护线程");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    System.out.println("Daemon线程执行 finally");
                }
            }
        }, "Daemon");
        thread.setDaemon(true);
        thread.start();
    }

}

执行结果我们可以看到,程序并不会执行到finally块中的内容,所以我们在这里要慎重使用
在这里插入图片描述

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

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

相关文章

什么是云计算?什么是边缘计算?为什么需要云边协同?

一、云计算的发展有哪些弊端&#xff1f; **云计算&#xff08;cloud computing&#xff09;**是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;通过多部服务器组成的系统进行处理和分析这些小程序…

Android 启动流程梳理

前言 什么是Android启动流程呢&#xff1f;其实指的就是我们Android系统从按下电源到显示界面的整个过程。 当我们把手机充好电&#xff0c;按下电源&#xff0c;手机会弹出相应启动界面&#xff0c;在等了一段时间之后&#xff0c;会弹出我们熟悉的主界面&#xff0c;这其实就…

开源数据备份工具 Duplicati

使用 Duplicati 腾讯云 COS&#xff0c;完美备份我的服务器数据。 文件备份需求 我有两台腾讯云的服务器&#xff0c;一台部署了博客&#xff0c;一台部署了一些个人项目&#xff0c;虽说云服务器很稳定&#xff0c;基本不会发生丢失数据的问题&#xff0c;但我个人之前经历过…

ThreeJs学习

1 基本使用 //1、创建场景 const scene new THREE.Scene() //2、创建网格模型 const geometry new THREE.BoxGeometry(100,100,100) const matrial new THREE.MeshLambertMaterial({color: #0000ff }) const mesh new THREE.Mesh(geometry,matrial) scene.add(mesh) //3、…

Redis之String类型和Hash类型的介绍和案例应用

一. String类型基础 1.类型介绍 典型的Key-Value集合&#xff0c;如果要存实体&#xff0c;需要序列化成字符串&#xff0c;获取的时候需要反序列化一下。 2. 指令Api说明 ​ 编辑3.常用Api说明 (1).StringSet&#xff1a;写入数据,如果数据已经存在,则覆盖;可以一次性存入1…

B2B电子商务策略[在2022年发展您的业务]

常规的电子商务商店向消费者&#xff08;B2C 或企业对消费者&#xff09;销售产品。B2B&#xff08;企业对企业&#xff09;电子商务不同于常规电子商务&#xff0c;因为 B2B电子商务的商业模式是让一家企业在线向另一家公司销售产品。 您可能会想&#xff1a;如何向企业销售比…

Windows OpenGL 图像色调

目录 一.OpenGL 图像色调调节 1.原始图片2.效果演示 二.OpenGL 图像色调调节源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL…

Ubuntu 20.04 server永久关闭swap

方法一 编辑/etc/fstab &#xff0c;sudo vim /etc/fstab&#xff0c;找到如下行 找到/dev/disk/by-uuid/28b306c5-92e4-4180-966d-cdedfbce3a4d /boot ext4 defaults 0 1 修改为如下图&#xff0c;并(/swap.img none swap sw 0 0) 将如下行注释&#…

Yolo算法检测之Anchor Boxes原理详解

刚开始yolo系列的目标检测算法&#xff0c;在一个网格中只能检测一个对象&#xff0c;但是我们在实验中发现&#xff0c;一个网格中很多时候存在不仅一个目标&#xff0c;可能存在多个目标&#xff0c;类似如下图所示&#xff0c;下面中间的网格中就存在人和车辆两个目标的中心…

嵌入式开发学习之--Git管理代码

本章主要介绍一下代码管理&#xff0c;在最后有常用的git指令&#xff0c;可以档资料收藏一下。 文章目录前言一、Github是什么二、Github的简单应用1.新建库 git init2. 添加文件 git add .2. 提交到本地仓库 git commit -m "注释"3. 创建分支 Git checkout -b [分支…

IPython工作原理

IPython工作原理 文章目录IPython是什么&#xff1f;IPython工作原理IPython控制台IPython内核实现一个简单的包装内核代码在IPython内核中的执行流程IPython是什么&#xff1f; Python最有用的功能之一就是它的交互式解释器。交互式编程允许我们非常快速地执行代码片段、测试…

[附源码]计算机毕业设计在线教育系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

详解 Intersection Observer API ( 交叉观察器 )

文章目录一、介绍二、兼容性三、内置方法/属性四、使用五、相关链接一、介绍 Intersection Observer API 提供了一种方法可以监听目标元素是否展示到视口&#xff08;viewport&#xff09;&#xff0c;常见的需求场景&#xff1a; 图片懒加载滚动动画… 上述的需求&#xff…

基于PHP+MySQL医院门诊缴费系统的设计与实现

本医院门诊缴费系统可以说是一个综合性的医院门诊缴费系统,这它包含了挂号管理,医生信息管理,药品信息管理,患者信息管理,住院信息挂了,收费信息管理等多种功能,因而具有一定的实用性。本站是一个B/S模式系统,开发采用了目前流行的PHP技术。系统界面友好,操作简单,比较实用。 本…

浅谈小程序开源业务架构建设之路

一、业务介绍 1.1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态&#xff0c;我们的愿景是&#xff1a;定义移动时代最佳体验&#xff0c;建设智能小程序行业标准&#xff0c;打破孤岛&#xff0c;共建开源、开放、繁荣的小程序行业生态。百度…

element-ui实现一个动态布局的对话框

前言&#xff1a;在工作中有各种各样的对话框&#xff0c;最多就是填写信息这些的&#xff0c;一般这样的内容都是el-input输入框&#xff0c;el-select选择框等等之内的&#xff0c;这时我们就可以封装成一个组件&#xff0c;想要什么内容就传一个json配置&#xff0c;像其他组…

适合Python初学者阅读的Github开源代码

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 你想要的&#xff0c;这里都有&#xff01; Python作为一门热门的编程语言&#xff0c;在Github上想要找Python项目可以说是「多如牛毛」。 无论是Star数量还是项目数量&#xff0c;都稳居前3名。 项…

5分钟搭建一个粗粒度「视频去重」系统

Jupyter Notebook 教程: How to Build a Video Deduplication System 「视频去重」可以在海量的视频数据中实现侵权片段或者删除掉重复冗余的内容 。随着抖音、快手、Bilibili 等视频平台的兴起和火爆&#xff0c;类似视频这样的非结构化数据在数量上有了极大的增长。 视频平台…

【数据可视化】第四章—— 基于pandas的数据可视化(pandas基本操作)

图形绘制的代码&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1pgS60sry6XDILIhth8bAvA?pwdabcd 提取码&#xff1a;abcd 文章目录1. Pandas库的数据运算1.1 方法形式的运算1.2 比较运算法则1.3 排序2. 基本统计分析函数2.1 基本统计分析函数2.2 累计统计分析函数2.3 …

[附源码]计算机毕业设计JAVA学生量化考核管理系统

[附源码]计算机毕业设计JAVA学生量化考核管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…