【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 线程已经凉透了~~


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yocto是如何收集recipes,如何加入现有的bb文件

yocto通常是如何收集recipes: 在Yocto中,通过以下方式收集recipes: 层(Layers) Yocto项目使用层来组织recipes。层是包含配置文件、recipes和其他相关文件的目录结构。每个层有自己的目录,其中 recipes-* 目录用于存…

原生鸿蒙的竞争力到底如何?

目录 1. 崛起与挑战2. 安全机制3. 自动化检测前移4. 深入探讨开发者服务优势 1. 崛起与挑战 长期以来,移动操作系统市场被IOS和安卓所垄断,一直都难以推出完整的自主系统,面临诸多挑战,如推广困难、应用适配难度大,以及…

sublime Text中设置编码为GBK

要在sublime Text中设置编码为GBK,请按照以下步骤操作 1.打开Sublime Text编辑器, 2.点击菜单栏中的“Preferences”(首选项)选项,找打Package Control选项。 3.点击Package Control,随后搜索Install Package并点击,如下图 4.再…

KPRCB结构之ReadySummary和DispatcherReadyListHead

ReadySummary: Uint4B DispatcherReadyListHead : [32] _LIST_ENTRY 请参考 _KTHREAD *__fastcall KiSelectReadyThread(ULONG LowPriority, _KPRCB *Prcb)

Python爬虫:揭开淘宝商品描述的神秘面纱

在这个信息爆炸的时代,我们每天都在和时间赛跑。作为一名Python开发者,你是否曾梦想拥有超能力,能够瞬间揭开淘宝商品描述的神秘面纱?今天,就让我们一起化身为代码界的“福尔摩斯”,使用Python爬虫技术&…

HTML 多媒体标签详解:<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

台式电脑如何改ip地址:全面解析与实操指南

有时候&#xff0c;由于IP地址冲突、网络安全、隐私保护或特定应用需求&#xff0c;我们可能需要更改台式电脑的IP地址。然而&#xff0c;对于不熟悉网络设置的用户来说&#xff0c;这一过程可能显得复杂而陌生。本文将通过全面解析与实操指南&#xff0c;帮助大家轻松掌握台式…

跟着红队笔记学习 tmux:渗透测试中的多终端利器

内容预览 ≧∀≦ゞ 跟着红队笔记学习 tmux&#xff1a;渗透测试中的多终端利器进入 tmux 前的准备tmux 概念简介tmux 基础操作会话管理命令会话管理快捷键会话内和会话外命令的区别 tmux 窗口和面板管理新建和管理窗口分割窗口为面板切换面板面板放大与恢复调整面板大小关闭面板…

【机器学习】24. 聚类-层次式 Hierarchical Clustering

1. 优势和缺点 优点&#xff1a; 无需提前指定集群的数量 通过对树状图进行不同层次的切割&#xff0c;可以得到所需数量的簇。树状图提供了一个有用的可视化-集群过程的可解释的描述树状图可能揭示一个有意义的分类 缺点&#xff1a; 计算复杂度较大, 限制了其在大规模数据…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (2) - 移植 nanovg

AWTK 使用 nanovg 作为显示的后端&#xff0c;能否将 nanovg 成功移植到 HarmonyOS 上是一个关键问题&#xff0c;所以我们先尝试移植 nanovg&#xff0c;不过实际情况比预想的要简单&#xff0c;整个过程没有遇到任何意外的问题。 1. 将 AWTK 的代码取到 entry/src/main/cpp …

函数调用方法背后的原理

编译器实现函数调用时所遵循的一系列规则称为函数的“调用约定&#xff08;Calling Convention&#xff09;”&#xff0c;x86-64平台上的编译器随着操作系统的不同而有不同的约定。Windows上采用的是Wx64/Vector的标准,而类unix上采用systemV AMD64 ABI的调用标准。统一的调用…

Pinpoint(APM)进阶--插件开发

接上文 pinpoint支持编写插件来扩展监控的覆盖范围 这里重申下pinpoint一个trace的基本构成&#xff08;最小单元为span&#xff09; 插件结构 pinpoint插件由type-provider.yml 和实现组成 type-provider.yml 定义给插件使用的ServiceTypes和AnnotationKeys&#xff0c;并…

qt QPalette详解

1、概述 QPalette是Qt框架中用于管理颜色组和角色的一种机制。它允许开发者为应用程序中的不同组件&#xff08;如窗口、按钮、文本框等&#xff09;定义一套统一的颜色方案。QPalette通过定义颜色角色&#xff08;如背景色、前景色、选择色等&#xff09;和颜色组&#xff08…

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法&#xff0c;主要如下&#xff1a; 数据组织&#xff1a;文件系统将数据组织成文件和目录&#xff0c;使用户能够更方便地管理和查找文件。每个…

<HarmonyOS第一课>应用/元服务上架的课后习题

善者&#xff0c;吾善之&#xff1b; 不善者&#xff0c;吾亦善之&#xff0c;德善。 信者&#xff0c;吾信之&#xff1b; 不信者&#xff0c;吾亦信之&#xff0c;德信。 圣人在天下&#xff0c;歙歙焉为天下浑其心&#xff0c;百姓皆注其耳目&#xff0c;圣人皆孩之。 通过&…

从源码到成品应用:互联网医院系统与在线问诊APP的开发全解析

今天将全面解析互联网医院系统和在线问诊APP的开发过程&#xff0c;从源码到成品应用&#xff0c;帮助您理解其中的关键技术和实施策略。 一、系统架构设计 互联网医院系统和在线问诊APP的开发首先需要一个合理的系统架构。通常&#xff0c;系统架构分为前端和后端两个部分。…

2024年【危险化学品生产单位安全生产管理人员】考试内容及危险化学品生产单位安全生产管理人员作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员考试内容是安全生产模拟考试一点通生成的&#xff0c;危险化学品生产单位安全生产管理人员证模拟考试题库是根据危险化学品生产单位安全生产管理人员最新版教材汇编出危险化学品生…

企业出海网络:SD-WAN与专线混合组网方案

随着越来越多的国内企业进入海外市场&#xff0c;包括出海电商、游戏、社交网络和区块链等领域&#xff0c;它们通常需要使用海外服务器。同时&#xff0c;这些企业在国内也会拥有自己的机房、IDC或依赖其他云服务提供商的机房。在这种情况下&#xff0c;如何实现国内外之间的高…

vue 果蔬识别系统百度AI识别vue+springboot java开发、elementui+ echarts+ vant开发

编号&#xff1a;R03-果蔬识别系统 简介&#xff1a;vuespringboot百度AI实现的果蔬识别系统 版本&#xff1a;2025版 视频介绍&#xff1a; vuespringboot百度AI实现的果蔬识别系统前后端java开发&#xff0c;百度识别&#xff0c;带H5移动端&#xff0c;mysql数据库可视化 1 …

深度了解flink Flink 本地运行Standalone模式

环境准备 IDEA 必须git 必须maven 必须jdk 1.8 必须scala 2.12.7 源码下载 如果能访问github&#xff0c;下载github的源码(flink的代码托管网站) git clone https://github.com/apache/flink.git 如果不能访问github&#xff0c;可以通过码云下载(国内的代码托管平台) g…