JavaWeb5-线程常用属性
目录
1.ID
2.名称
3.状态
4.优先级
5.是否守护线程
5.1.线程类型:
①用户线程(main线程默认是用户线程)
②守护线程(后台/系统线程)
5.2.守护线程作用
5.3.守护线程应用
5.4.守护线程使用
①在用户线程(main线程)中创建的子线程默认情况下也是用户线程
②在守护线程中创建的子线程默认情况下也是守护线程
③守护线程和用户线程的区别
6.是否存活
7.是否被中断
PS:线程执行顺序or随机判断准则
1.ID
是线程的唯⼀标识,不同线程ID不会重复,是动态分配的。(相当于进程PID)
2.名称
是各种调试⼯具⽤到,默认不同线程名称是不同的,但若手动指定不同线程名称可以重复。
/*** 线程属性:id、name*/
public class ThreadDemo13 {public static void main(String[] args) throws InterruptedException {Runnable runnable = new Runnable() {@Overridepublic void run() {//得到执行当前任务的线程Thread t = Thread.currentThread();//打印线程id(是long类型)System.out.println("线程ID:" + t.getId());//打印线程名称System.out.println("线程名称:" + t.getName());}};Thread thread = new Thread(runnable,"线程1");thread.start();Thread.sleep(500);System.out.println();Thread thread2 = new Thread(runnable,"线程1");thread2.start();}
}
3.状态
表示线程当前所处的⼀个情况。
/*** 线程状态的流转*/
public class ThreadDemoByState {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(new Runnable() {@Overridepublic void run() {//拿到当前线程,并打印当前线程的状态Thread thread = Thread.currentThread();System.out.println("线程状态2:" + thread.getState());}});//打印线程的状态System.out.println("线程状态:" + t.getState());t.start();//再次打印线程状态Thread.sleep(500);System.out.println("线程状态3:" + t.getState());}
}
4.优先级
优先级⾼的线程理论上来说更容易被调度到。
线程创建之后,优先级就已经存在了。
/*** 获取线程优先级*/
public class ThreadDemoByPriority {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {//得到当前线程,并打印线程优先级Thread t = Thread.currentThread();System.out.println("线程优先级:" + t.getPriority());}});System.out.println("线程优先级2:" + thread.getPriority());thread.start();Thread.sleep(500);System.out.println("线程优先级3:" + thread.getPriority());}
}
线程优先级是int类型值,为1-10,最小优先级是1,最高优先级是10,默认优先级是5。

设置线程优先级(2种):
t1.setPriority(Thread.MAX_PRIORITY);
t1.setPriority(10);/*** 设置线程优先级*/
public class ThreadDemoByPriority2 {private final static int MAX_COUNT = 7;public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {//得到当前线程Thread t = Thread.currentThread();//得到线程的优先级int priority = t.getPriority();for (int i = 0; i < MAX_COUNT; i++) {System.out.println(t.getName() + "——优先级:" + priority);}}},"线程1");//设置线程优先级(2种写法)
//        t1.setPriority(10); //直接赋值t1.setPriority(Thread.MAX_PRIORITY); //枚举Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {Thread t = Thread.currentThread();int priority = t.getPriority();for (int i = 0; i < MAX_COUNT; i++) {System.out.println(t.getName() + "——优先级:" + priority);}}},"线程2");t2.setPriority(Thread.MIN_PRIORITY);Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {Thread t = Thread.currentThread();int priority = t.getPriority();for (int i = 0; i < MAX_COUNT; i++) {System.out.println(t.getName() + "——优先级:" + priority);}}},"线程3");t3.setPriority(Thread.NORM_PRIORITY);//同时启动线程(非常快,可以认为是同时的)t2.start();t1.start();t3.start();}
}

多个线程设置了不同的优先级,同时启动这多个线程,并不是优先级最高的一定先执行完之后再执行优先级最低的线程,而是高优先级获取到CPU时间片的概率更多,整个执行大致符合高优先级的线程最先执行完。
快捷键设置:
ctrl+F查找
ctrl+H替换
5.是否守护线程
5.1.线程类型:
①用户线程(main线程默认是用户线程)
程序员创建的线程。
②守护线程(后台/系统线程)
5.2.守护线程作用
守护线程是为⽤户线程服务的,当一个程序中的所有⽤户线程全部结束之后,守护线程会跟随结束。
5.3.守护线程应用
JVM 中的垃圾回收器就是典型的守护线程,程序运⾏的时候它也运⾏,当满⾜条件时进⾏垃圾回收,在一个进程中所有非后台线程执⾏完任务终⽌时它才会结束运行。
5.4.守护线程使用
//获取当前线程是否是守护线程
thread.isDaemon()
//true->守护线程; false->用户线程//手动指定线程类型
t1.setDaemon(true);
//true->守护线程; false->用户线程①在用户线程(main线程)中创建的子线程默认情况下也是用户线程
/*** 守护线程示例*/
public class ThreadDemoByDaemon {public static void main(String[] args) {//得到当前的线程(main主线程)Thread thread = Thread.currentThread();System.out.println("是否是守护线程:" + thread.isDaemon());Thread t1 = new Thread(() -> {//得到当前线程Thread cThread = Thread.currentThread();System.out.println(cThread.getName() + "——是否是守护线程:" + thread.isDaemon());},"子线程1");t1.start(); //启动线程}
}
②在守护线程中创建的子线程默认情况下也是守护线程
/*** 守护线程示例*/
public class ThreadDemoByDaemon {public static void main(String[] args) throws InterruptedException {//得到当前的线程(main主线程)Thread thread = Thread.currentThread();System.out.println(thread.getName() + "——是否是守护线程:" + thread.isDaemon());Thread t1 = new Thread(() -> {//得到当前线程Thread cThread = Thread.currentThread();System.out.println(cThread.getName() + "——是否是守护线程:" + cThread.isDaemon());//创建子线程Thread tt1 = new Thread(() -> {Thread cThread2 = Thread.currentThread();System.out.println(cThread2.getName() + "——是否是守护线程:" + cThread2.isDaemon());},"子线程的子线程1");tt1.start();},"子线程1");//手动指定线程为守护线程t1.setDaemon(true);t1.start(); //启动线程//主线程休眠1sThread.sleep(1000);}
}注:线程类型(用户or守护)不能在线程运行期间,也就是调用了 start() 之后设置,否则JVM会报错。
③守护线程和用户线程的区别
/*** 对比用户线程和守护线程的区别*/
public class ThreadDemoByDaemon2 {public static void main(String[] args) throws InterruptedException {userThread();daemonThread();}/*** 用户线程*/private static void userThread() {Thread thread = new Thread(() -> {for (int i = 0; i < 10; i++) {System.out.println("用户线程执行:" + i);try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}});thread.start();}/*** 守护线程*/private static void daemonThread() {Thread t = new Thread(() -> {for (int i = 0; i < 10; i++) {System.out.println("守护线程执行:" + i);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}});//设置为守护线程t.setDaemon(true);//启动线程t.start();}
}

结论:JVM会等待所有的用户线程执行完再自然退出,但JVM不会等待守护线程执行完再退出。若用户线程没执行完强制退出,JVM也会退出。
线程的类型和线程的调度无关,只有线程的优先级和线程的调度有关。
6.是否存活
简单的理解为 run ⽅法是否运⾏结束了。
public class ThreadDemoByAlive {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {Thread thread = Thread.currentThread();System.out.println("线程是否存活2:" + thread.isAlive());});System.out.println("线程是否存活:" + t.isAlive());t.start();System.out.println("线程是否存活3:" + t.isAlive());Thread.sleep(1000);System.out.println("线程是否存活4:" + t.isAlive());}
}
使用场景:
public class ThreadDemoByAlive {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {for (int i = 0; i < 10; i++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("1:线程执行完了!");});t.start();while(t.isAlive()){}System.out.println("2:确认线程执行完了!");}
}
7.是否被中断
线程在休眠或执行当中,其他线程可以操作此线程让其中断。
PS:线程执行顺序or随机判断准则
- 在一个线程里的执行顺序是从上往下的。
- 多个线程之间的执行是随机的,因为线程调度是随机的。
public class ThreadDemo13 {public static void main(String[] args) throws InterruptedException {Runnable runnable = new Runnable() {@Overridepublic void run() {//得到执行当前任务的线程Thread t = Thread.currentThread();//打印线程id(是long类型)System.out.println(t.getName() + "——线程ID:" + t.getId());//①//打印线程名称System.out.println(t.getName() + "——线程名称:" + t.getName());//②//打印线程优先级System.out.println(t.getName() + "——线程优先级:" + t.getPriority());//③}};Thread thread = new Thread(runnable,"线程1");thread.start();Thread thread2 = new Thread(runnable,"线程2");thread2.start();Thread thread3 = new Thread(runnable,"线程3");thread3.start();} }
相关文章:
 
JavaWeb5-线程常用属性
目录 1.ID 2.名称 3.状态 4.优先级 5.是否守护线程 5.1.线程类型: ①用户线程(main线程默认是用户线程) ②守护线程(后台/系统线程) 5.2.守护线程作用 5.3.守护线程应用 5.4.守护线程使用 ①在用户线程&am…...
 
JVM调优及垃圾回收GC
一、说一说JVM的内存模型。JVM的运行时内存也叫做JVM堆,从GC的角度可以将JVM分为新生代、老年代和永久代。其中新生代默认占1/3堆内存空间,老年代默认占2/3堆内存空间,永久代占非常少的对内存空间。新生代又分为Eden区、SurvivorFrom区和Surv…...
JAVA练习53-打乱数组
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-打乱数组 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月17日练习内…...
 
基于RK3588的嵌入式linux系统开发(三)——Uboot镜像文件合成
本章uboot镜像文件的合成包括官网必备文件rkbin下载和uboot镜像文件合成两部分内容,具体分别如下所述。 (一)下载rkbin文件包 以上uboot编译生成的uboot镜像不能直接烧录到板卡中运行,需要与atf、bl31、ddr配置文件等必备文件合成…...
 
wireshark抓包后通过工具分包
分包说明:关于现场问题分析,一般都是通过日志,这个属于程序中加的打印,或存数据库,或者存文本形式,这种一般比较符合程序逻辑;还有一种就是涉及到网络通信方面的,需要通过抓包来分析…...
 
举个栗子~Tableau 技巧(251):统一多个工作表的坐标轴范围
在工作汇报场景,有一个很常见、很多数据粉反馈的需求:同一看板上的两个图表,因为轴范围不一致(如下图),很难直观比较。有什么办法可以统一它们的坐标轴范围呢? 类似需求,不论两个还是…...
 
Centos7 调整磁盘空间
1. 查看磁盘空间占用情况: df -h 可以看到 /home 有很多剩余空间,占了绝大部分, 而我又很少把文件放在home下。 2. 备份 /home 下的内容: cp -r /home/ /homebak/ 3. 关闭home进程: fuser -m -v -i -k /home 报错: -bash: fuser…...
 
小菜版考试系统——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是小菜版考试系统,最近一直在忙C语言课程设计的事,那么,就请uu们看看我的学习成果吧。 课程设计任务 摘要 题目分析 流程图 关键程序代码 程序运行结果 结论与心得 参…...
 
Twitter被封号了?最详细的申诉教程在此
由于Twitter检测系统是十分敏感的,所以在运营的时候很容易莫名就出现“此账号被封禁”或者“此账号被冻结”的情况。出现这种情况大多是因为账号发送了垃圾信息、面临安全风险、发太多广告或者太久没上线被判为机器人这几个原因。被封号后,我们可以通过向…...
Docker 安装配置
本章背景知识 本章主要介绍在 Centos 操作系统平台上进行安装和配置Docker Engine。 环境准备 1、操作系统支持。 CentOS、Debian、Fedora、Raspbian、RHEL、SLES、Ubuntu、Binaries 2、启用yum 软件仓库源。 centos-extras 编者注:Centos 默认已经开启cento…...
 
死锁检测组件-设想
死锁检测组件-设想 现在有三个临界资源和三把锁绑定了,三把锁又分别被三个线程占用。(不用关注临界资源,因为锁和临界资源是绑定的) 但现在出现这种情况:线程1去申请获取锁2,线程2申请获取锁3,…...
 
线程池的使用
为什么要使用线程池 复习一下创建线程的几种方式: 继承Thread 实现Runnable 实现Callable 但是如果频繁的创建/销毁线程,就会造成资源浪费。这时候就需要将线程创建好之后存起来,以后要用取出来,用完后再放回去。 注意 ÿ…...
 
字节码指令
目录 2.1 入门 2.2 javap 工具 2.3 图解方法执行流程 1)原始 java 代码 2)编译后的字节码文件 3)常量池载入运行时常量池 4)方法字节码载入方法区 5)main 线程开始运行,分配栈帧内存 6)…...
TLS/SSL证书彻底扫盲
证书格式 pem Privacy Enhanced Mail文本格式,以 -----BEGIN CERTIFICATE----- 开头,以-----END CERTIFICATE-----结尾 der 二进制格式,只保存证书,不保存私钥java和window服务器常见 pfx/p12 Predecessor of PKCS#12二进制格式&…...
 
WGCNA | 值得你深入学习的生信分析方法!~(网状分析-第五步-高级可视化)
1写在前面 前面我们用WGCNA分析完成了一系列的分析,聚类分割模块。🥰 随后进一步筛选,找到与我们感兴趣的表型或者临床特征相关的模块,而且进行了模块内部分析。😘 再然后是对感兴趣模块进行功能注释,了解模…...
try catch finally执行顺序
try catch finally,try里有return,finally还执行么?答案: 执行,并且返回return时,finally的执行早于try。try-catch-finally的执行顺序无return当try中的t()没有抛出异常public static void main(String[] …...
 
2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程
2023年数学建模美赛D题分析建模与编程 重要说明: 本文介绍2023年美赛题目,并进行简单分析;本文首先对 D题进行深入分析,其它题目分析详见专题讨论;本文及专题分析将在 2月17日每3小时更新一次,完全免费&am…...
 
35岁测试工程师被辞退,给你们一个忠告
一:前言:人生的十字路口静坐反思 入软件测试这一行至今已经10年多,承蒙领导们的照顾与重用,同事的支持与信任,我的职业发展算是相对较好,从入行到各类测试技术岗位,再到测试总监,再转…...
华为OD机试题 - 租车骑绿岛(JavaScript)
最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...
 
Linux下Python脚本的编写解析fio(minimal格式)(三)
在服务器测试(storage)过程中,会看到很多人写跑fio的脚本用minimal格式来解析,因为这种格式返回的结果对与脚本(shell,python)解析log非常方便.下面介绍一下这种方式下,用Python来解析log 1 一般客户会要求结果中出现一下参数的值: bandwidth…...
 
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
 
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
 
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
 
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
 
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
 
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
 
python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...






