【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.tpcf.cn/pingmian/59360.html

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

相关文章

论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck

论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck 1 背景1.1 问题1.2 本文提出的方法 2 创新点3 方法4 模块4.1 问题描述4.2 深度特征提取模块4.3 同任务渐进式训练策略 5 效果5.1 和SOTA方法对比 论文:https://arxi…

基于STM32的智能空气净化器设计

引言 本项目基于STM32微控制器设计了一个智能空气净化器,通过集成多个传感器模块和Wi-Fi模块,实现空气质量监测、净化以及远程控制功能。该系统可以实时检测环境中的空气质量,如PM2.5浓度、温湿度和有害气体浓度等,根据监测到的空…

Linux 无名管道

无名管道(unnamed pipe)是一种进程间通信的方式,通常用于父子进程之间的通信。下面是使用无名管道的基本步骤: pipe 调用的返回值如下: 成功时:pipe 调用成功时返回 0。失败时:如果 pipe 调用…

OpenHarmony与Android区别

OpenHarmony和Android是两种不同的操作系统,它们在设计理念、架构、技术特点以及应用场景上都有显著的区别。 是它们之间的主要区别: 1. 起源和所有权 Android:由谷歌公司开发并拥有,是一个广泛使用的开源操作系统,…

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1:变色 2.2.2 情况2:单旋变色 2.2…

健身房数字化转型:SpringBoot管理系统

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

字符串相乘(全网最快0ms方法)

一:题目 二:思路 解释:每次相乘的结果不进位直接放进同一个数组里,相同位置则新放进的结果即可,最后得到左图的数组,再对其进行进位,得到正确的结果 Q1:数组的大小取多少&#xff1…

深入浅出:解读注意力机制,让神经网络更“聪明”

1. Attention Mechanism 深入浅出:解读注意力机制,让神经网络更“聪明” 在现代人工智能中,注意力机制(Attention Mechanism) 是解锁神经网络强大表现的关键,尤其是对于像 Transformer 和 BERT 这样的前沿…

虚拟展厅和实景复刻有什么区别?应用场景和优势有哪些?

虚拟展厅和实景复刻在展览展示领域均扮演着重要角色,但二者之间存在显著的差异。以下是对这两者的详细比较: 一、定义与构建方式 虚拟展厅 虚拟展厅是利用数字技术和三维建模技术创建的虚拟展览环境,使参观者可以通过计算机、智能手机等设…

day06|计算机网络重难点之 TCP连接如何确保可靠性、拥塞控制如何实现、TCP流量控制如何实现、UDP如何实现可靠传输

day06|计算机网络重难点之 TCP连接如何确保可靠性、拥塞控制如何实现、TCP流量控制如何实现、UDP如何实现可靠传输 14.TCP连接如何确保可靠性15.既然提到了拥塞控制,那你能说说说拥塞控制是怎么实现的吗16.TCP流量控制是怎么实现的?17.UDP怎么实现可靠传…

如何删除react项目的默认图标,使在浏览器中不显示默认图标favicon.ico

要删除 React 项目的默认图标,使在浏览器中不显示默认图标favicon.ico,其实有两种方法: 方法一 方法要点:删除掉 public 目录下的 favicon.ico 文件,再用浏览器访问时,如果加载不到图标文件,就…

计算机网络——路由器构成

算路由表是分布式去算——你算你的,我算我的 输出队列非先来先传 调度发生在哪里 缓存队列一般是应对——来数据方向的速度过快问题

项目活动进度计算题

六个时间参数①最早开始时间ESmax{紧前工作最早完成时间EF}(紧前取大) 最早完成时间EFES工期,从左→右计算,累加取大 ②最迟完成时间LFmin{紧后工作最迟开始时间LS}(紧后取小) 最迟开始时间LSLF-工期&am…

练习LabVIEW第四十题

学习目标: 用labvIEW做一个循环闪烁指示灯,要能够在前面板调节周期和占空比。 开始编写: 前面板 一个布尔指示灯一维数组,两个数值输入控件; 程序框图 添加一个while循环,循环内添加初始化数组&…

工商业储能是什么,工商业储能有什么作用?

随着全球能源结构的转型和“双碳”目标的推进,工商业储能系统作为新型电力系统的重要组成部分,正逐渐成为能源管理和电力市场的关键力量。工商业储能系统通过削峰填谷、需量管理、电力现货交易等多种方式,不仅能够有效降低企业的用电成本&…

DApp开发定制:合约设计与源码搭建支持快速上线

随着区块链技术的飞速发展,去中心化应用(DApp)已经成为区块链生态中不可或缺的一部分。DApp不仅改变了传统互联网应用的运作方式,还通过去中心化的理念和智能合约的支持,赋能了用户和开发者。无论是金融、游戏、社交、…

ssm+vue683基于VUE.js的在线教育系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

CentOS操作系统安装过程简介

以下是在CentOS(以CentOS 7为例)中使用Anaconda安装器的一般步骤: 1. 准备工作 - 首先,需要获取CentOS 7的安装介质,可以是光盘或者制作好的USB启动盘。然后将计算机设置为从对应的安装介质启动。 2. 启动安装程序 -…

导出 MySQL 中所有表的结构(包括外键约束),并在另一个地方创建相同的表

要导出 MySQL 中所有表的结构(包括外键约束),并在另一个地方创建相同的表,您可以使用以下步骤: 1. 使用 mysqldump 导出表结构 mysqldump 是一个用于备份 MySQL 数据库的命令行工具,可以用来导出数据库的…

纯前端生成PDF(jsPDF)并下载保存或上传到OSS

前言 在工作中遇到了一个需求,就是把前端页面生成PDF并保存在本地,因为前端网站可能会展示各种表格,图表信息内容并带有比较鲜艳的色彩样式,如果让后端生产的PDF的话样式可能和前端页面展示的有所差异,所以这个任务就落…