当前位置: 首页 > news >正文

【JavaEE初阶 — 多线程】Thread的常见构造方法&属性


目录

Thread类的属性

1.Thread 的常见构造方法

2.Thread 的几个常见属性

2.1  前台线程与后台线程

2.2  setDaemon()

2.3  isAlive()


Thread类的属性


  • Thread 类是JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的Thread 对象与之关联;
  • 每个执行流,也需要有一个对象来描述;
  • Thread类的对象就是用来描述一个线程执行流的,JVM会将这些Thread对象组织起来,用于线程调度,线程管理。


1.Thread 的常见构造方法


方法说明
Thread()
 
创建线程对象,必须要重写 Thread类 的 run()方法
 
Thread(Runnable target)

使用 Runnable 对象创建线程对象

【不用重写 Thread类 的 run()方法】

Thread(String name)

创建线程对象,并命名
 

Thread(Runnable target,String name)

使用 Runnable对象创建线程对象,并命名

    Thread(ThreadGroup group, Runnable target)

线程可以被用来分组管理,分好的组即为线程组

【这个目前我们了解即可】


对于 Thread类 的第四种构造方法,第一个参数传的是lamda表达式,lamda相当于Rannable;

再传入的第二个参数,就是这个线程的名字,需要手动添加 “  ” 

如果要调用:带有 自定义线程名字 的参数 的 构造方法,无论自定义的名字是什么,都不会不影响线程的执行的;为了方便程序员调试,可以给线程起名字。

程序运行后,我们可以通过 jconsole 这个工具,在线程列表中,看到自定义名字,并且正在运行的线程。除了自定义的线程,线程列表中的线程是JVM提供的线程。


如果我们不定义名字,程序调用 Thread类 的第一个构造方法,在jconsole的线程列表中,我们可以发现,如果不自定义线程名,系统会使用默认线程名 Thread - 数字 来命名线程。


如果在一个进程中有多个线程,这些线程,会被CPU随机调度,并发执行;

所以不一定会因为主线程结束,整个进程也跟着结束


2.Thread 的几个常见属性


属性
 
获取方法
 
ID
【线程的唯一标识,不同线程不会重复】
getId()
 
名称
【各种调试工具都会用到】
getName()
 
状态
【表示线程当前所处的一个情况】
getState()
 
优先级
【优先级高的线程理论上来说更容易被调度到】
getPriority()
 
是否后台线程
JVM会在一个进程的所有非后台线程结束后,才会结束运行
isDaemon()
 
是否存活
【简单的理解为,run() 是否运行结束了】
isAlive()
 
是否被中断
 
isInterrupted()

2.1  前台线程与后台线程


如果在程序运行的过程中,我们通过 jconsole 查看线程列表中没有main,说明主线程已经结束;

主线程结束,但是 t1,t2,t3 还在,使用进程还在;说明 t1,t2,t3 能够影响进程是否终止。

所有类似 t1,t2,t3 这样能够有效进程存在的线程,称为 “前台线程”。

程序员通过代码创建的线程 和 主线程,都默认是前台线程。

总结:

  1. 能影响进程存在的,是前台线程;不能影响进程存在的,是后台线程;
  2. JVM会在一个进程的所有非后台线程结束后,才会结束运行

2.2  setDaemon()


程序员通过编写代码,创建的线程,包括main主线程,默认都是前台线程;

但是可以通过setDaemon(),将  前台线程 修改成 后台线程~~ 

上述代码的逻辑:主线程和 t 线程并发执行,并且主线程在打印三次“ hello main ”后,打印结束日志,而 t 线程继续执行死循环,所以进程没有因为主线程终止而结束

所以,t 线程是一个前台线程,我们可以通过 isDeamon() 将 t 设置成后台线程;

通过 t.isDaemon(true) ,把 t 线程 从前台线程设置成后台线程;

此时,代码中只有主线程一个前台线程,所以在主线程运行结束后,整个进程结束,t 线程的死循环也被迫结束。

拓展:

进程与进程之间存在父子关系,而线程与线程之间则不存在;比如:

IDEA 本身也是一个 Java 进程;在 IDEA 中运行一个 Java  代码,通过IDEA 进程,又创建出一个新的Java 进程,这俩进程之间就是父子关系。


 2.3  isAlive()


Java 代码中创建的Thread对象,和系统中的线程,是一 一对应的关系;

但是,Thread 对象 的生命周期,和 系统中的线程 的生命周期,是不同的~~

(可能存在:Thread对象 还存活,但是 系统中的线程 已经销毁 的情况) 

我们引入一段代码,来看看"Thread对象还存活,但是系统中的线程已经销毁的情况"这种情况:

这个代码的逻辑:

前三秒 sleep1000毫秒 t线程的状态都是alive的状态,三秒后执行结束,t线程的isalive状态为false

线程的入口方法里的逻辑结束了,系统中对应的线程也就随之销毁了(操作系统) ;

虽然系统中的线程已经销毁,但是 Thread对象 还存活;

因此,t线程 被销毁,但是 t 这个对象依旧存在,所以才能一直通过t对象,调用isAlive方法


再多执行几次上述代码,发现程序运行结果中的 true 的个数是 3 还是 4 不固定,这是线程随机调度造成的: 

主线程第四次打印,和 t线程 的结束,谁先谁后,是不一定的;

如果打印 true 的次数为4,说明在 第四次 主线程 和 t线程 并发执行的顺序是:

  1. 先执行主线程中的打印 t.isAlive
  2. 然后才执行 t线程 中的循环判断是否结束

所以 打印的第一个 false 是第五次执行线程,此时 t 线程已经凉透了~~


相关文章:

【JavaEE初阶 — 多线程】Thread的常见构造方法&属性

目录 Thread类的属性 1.Thread 的常见构造方法 2.Thread 的几个常见属性 2.1 前台线程与后台线程 2.2 setDaemon() 2.3 isAlive() Thread类的属性 Thread 类是JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的Thread 对象与之关联&am…...

ctfshow(316)--XSS漏洞--反射性XSS

Web316 进入界面: 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题,看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台,显示的cookie还是这样…...

ubuntu22.04安装conda

在 Ubuntu 22.04 上安装 Conda 可以通过以下步骤进行: 下载 Miniconda(轻量级版本的 Conda): 打开终端并运行以下命令以下载 Miniconda 安装脚本: wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-…...

D58【python 接口自动化学习】- python基础之异常

day58 异常捕获 学习日期:20241104 学习目标:异常 -- 74 自定义异常捕获:如何定义业务异常? 学习笔记: 自定义异常的用途 自定义异常的方法 # 抛出一个异常 # raise ValueError(value is error) # ValueError: val…...

Java项目实战II基于Spring Boot的便利店信息管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的…...

Java-日期计算工具类DateCalculator

DateCalculator是用于日期计算的工具类。这个工具类将包括日期的加减、比较、周期计算、日期 范围生成等功能。 import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Period; import java.time.temporal.ChronoUnit;…...

单片机串口接收状态机STM32

单片机串口接收状态机stm32 前言 项目的芯片stm32转国产,国产芯片的串口DMA接收功能测试不通过,所以要由原本很容易配置的串口空闲中断触发DMA接收数据的方式转为串口逐字节接收的状态机接收数据 两种方式各有优劣,不过我的芯片已经主频跑…...

ipv6的 fc00(FC00::/7) 和 fec0(FEC0::/10)

ipv6的 fc00(FC00::/7)(唯一本地地址) 替代了 fec0(FEC0::/10) (站点本地地址,已弃用) ipv6的 fc00(FC00::/7) 替代了 fec0(FEC0::/10) , 在IPv6地址中,FC00::/7(通常简写为FC00)和…...

Chat GPT英文学术写作指令

目录 Chat GPT英文学术写作指令 Chat GPT英文学术写作指令 1."为我捉供一些建议和技巧,以提高我的学术写作质最和风格" (Provide me with some suggestions andtips to improve the quality andstyleofmyacademic writing.) 2."帮我提写一个清晰而有逻辑的…...

超详细Pycharm安装汉化教程,Python环境配置和使用指南,Python零基础入门看这个就够了!

包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】! PyCharm 是由 JetBrains 打造的一款 Python IDE (集成开发环境,Integrated Development Environment),带有一整套可以帮助用户在使用 Py…...

react-native:解决使用webView后部分场景在安卓10崩溃闪退问题

app闪退问题原因: 安卓7以上版本(7和7以下版本不会出现闪退):在屏幕不可视区域加载webView或者webView不在可视区域内切换页面时app崩溃闪退(在屏幕可视区域加载webView或者webView在可视区域内切换页面不会闪退&…...

大数据工具 flume 的安装配置与使用 (详细版)

参考网址:Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了 1,上传安装包 安装包链接:文件下载-奶牛快传 Download |CowTransfer 口令:x8bhcg 1,切换盘符到安装目录 cd /opt/moudles 解压文件…...

智慧城市智慧城市项目方案-大数据平台建设技术方案(原件Word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障…...

C语言比较两个字符串是否相同

在不使用string.h中的内置函数的情况下 #include <stdio.h> #include <string.h> void main(){char arr1[]"hello world";char arr2[]"hello world";int i,a0;if(strlen(arr1)!strlen(arr2)){print("不相等");return 0;}for(i0;arr…...

丹摩征文活动|FLUX.1图像生成模型:AI工程师的创新实践

文章目录 一、对"FLUX.1"系列模型版本分析 二、AI工程师与FLUX.1系列模型 三、ComfyUI在线部署四、FLUX.1在线部署五、添加工作流呈现效果图展示六、总结 黑森林实验室&#xff08;Black Forest Labs&#xff09;推出的FLUX.1图像生成模型&#xff0c;凭借120亿参数的…...

ZABBIX API获取监控服务器OS层信息

Zabbix 是一款强大的开源监控解决方案,能够通过其 API 接口自动化管理和获取监控数据。在这篇文章中,详细讲解如何通过 Zabbix API 批量获取服务器的系统名称、IP 地址及操作系统版本信息,并将数据保存到 CSV 文件中。本文适合对 Python 编程和 Zabbix 监控系统有一定基础的…...

SpringBoot基础系列学习(五):JdbcTemplate 访问数据库

文章目录 一丶介绍二丶引入依赖三丶配置配置文件四丶创建表五丶java代码 一丶介绍 Spring Boot作为Spring的集大成者&#xff0c;自然会将JdbcTemplate集成进去。Spring Boot针对JDBC的使用提供了对应的Starter包&#xff1a;spring-boot-starter-jdbc&#xff0c;它其实就是在…...

JavaEE-多线程初阶(3)

目录 1.线程的状态 1.1 NEW、RUNNABLE、TERMINATED 1.2 TIMED_WAITING 1.3 WAITING 1.4 BLOCKED 2.多线程带来的风险-线程安全&#xff08;重点&#xff09; 2.1 观察线程不安全的现象 2.2 分析产生该现象的原因 2.3 产生线程安全问题的原因 2.3.1 抢占式执行&#x…...

从入门到精通:如何在Vue项目中有效运用el-image-viewer

Element UI之el-image-viewer组件详解 引言 在现代 Web 应用中,高质量的用户体验是不可或缺的一环。Element UI 作为一款基于Vue.js 2.0 的桌面端组件库,以其丰富的组件集、良好的文档和支持赢得了广大开发者的好评。本文将深入探讨el-image-viewer组件,这是一个用于在网页…...

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…...

合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等技术应用

合成孔径雷达干涉测量&#xff08;Interferometric Synthetic Aperture Radar, InSAR&#xff09;技术作为一种新兴的主动式微波遥感技术&#xff0c;凭借其可以穿过大气层&#xff0c;全天时、全天候获取监测目标的形变信息等特性&#xff0c;已在地表形变监测、DEM生成、滑坡…...

从‘看到’到‘看懂’:VSRN模型如何像人一样进行视觉语义推理?一个生动的案例拆解

从‘看到’到‘看懂’&#xff1a;VSRN模型如何像人一样进行视觉语义推理&#xff1f;一个生动的案例拆解 想象这样一个场景&#xff1a;你看到一张照片&#xff0c;画面中一只棕色的狗在绿色的草地上追逐飞盘。几乎瞬间&#xff0c;你的大脑就完成了从视觉感知到语义理解的完整…...

taotoken用量看板如何帮助开发者清晰掌握各模型消耗详情

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken用量看板如何帮助开发者清晰掌握各模型消耗详情 对于使用多个大模型进行开发的团队或个人而言&#xff0c;成本管理是一个…...

观察Taotoken在多模型自动路由下的服务可用性与容灾表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在多模型自动路由下的服务可用性与容灾表现 在构建基于大模型的应用时&#xff0c;服务的稳定性是保障业务连续性的基…...

犀牛开发者日记-犀牛论剑特辑 | 李江浩:一个 ROS 布道师的转身

熟悉ROS领域的朋友&#xff0c;对李江浩这个名字想必并不陌生。作为资深ROS布道师&#xff0c;他常年活跃在技术社区分享干货&#xff0c;面对同行提出的各类问题&#xff0c;总能给出快准狠的解决方案&#xff0c;精准直击技术痛点。熟悉他的人都有一个共同感受&#xff1a;李…...

为什么你的Perplexity图标总返回404?深度逆向其图标CDN路由算法(附Python自动化探测脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity图标资源搜索 Perplexity AI 官方未提供公开的图标资源包&#xff08;如 SVG、Favicon 或 App Icon 套件&#xff09;&#xff0c;但开发者可通过合法合规方式获取其品牌视觉资产用于技术文档…...

带标注的胶囊缺陷识别数据集,识别率68.9%,可识别印刷不良,裂纹,戳痕,划痕,挤压变形五种缺陷,219张图,支持yolo,coco json,voc xml,文末有模型训练代码

​ 带标注的胶囊缺陷识别数据集&#xff0c;识别率68.9%&#xff0c;可识别印刷不良&#xff0c;裂纹&#xff0c;戳痕&#xff0c;划痕&#xff0c;挤压变形五种缺陷&#xff0c;219张图&#xff0c;支持yolo&#xff0c;coco json&#xff0c;voc xml,文末有模型训练代码 模…...

拆解新客裂变与裂变率:诺云用户可直接套用的获客增长指南

在流量红利消退、公域获客成本高企的当下&#xff0c;“新客裂变”早已成为企业降低获客成本、实现指数级增长的核心抓手&#xff0c;而“裂变率”作为衡量裂变效果的核心指标&#xff0c;直接决定了这场获客动作的成败。今天&#xff0c;我们就聚焦“新客裂变”与“裂变率”这…...

从零到一:手把手教你用Cornerstone.js搭建一个基础的医学影像查看器

从零到一&#xff1a;手把手教你用Cornerstone.js搭建一个基础的医学影像查看器 医学影像的数字化呈现一直是医疗技术发展的重要方向。随着Web技术的进步&#xff0c;直接在浏览器中查看和操作DICOM等专业医学影像已成为可能。本文将带领前端开发新手一步步实现一个基础的医学影…...

【DBC专题】-12-基于Cantools的CAN/CANFD DBC文件自动化C代码生成实战指南

1. 环境准备与工具链搭建 第一次接触CAN总线开发时&#xff0c;我被DBC文件到C代码的手动转换折磨得够呛。直到发现Cantools这个神器&#xff0c;才真正体会到什么叫"一劳永逸"。这个Python工具链能自动将DBC描述文件转换为可直接编译的C代码&#xff0c;特别适合需要…...