多线程——线程的状态

线程状态的意义

‌线程状态的意义在于描述线程在执行过程中的不同阶段和条件,帮助开发者更好地管理和调度线程资源。

线程的多种状态

线程的状态是一个枚举类型(Thread.State),可以通过线程名.getState();的方式获取到当前的线程状态,也可以通过java自带的jconsole程序查看线程状态。线程有以下状态:

线程的状态转移

如图所示,这些是线程状态转移的基本形式

我们先来看NEW、RUNNABLE、TERMINATED这些状态的转移

这个线程从开始的初始化未创建状态转变到正在执行状态(就绪状态)然后到终止状态

我们再来关注一下WAITING、BLOCKED、TIMED_WAITING状态:

我们先来看有超时时间和无超时时间的状态:

观察以上代码,t线程执行sleep操作,相当于有超时时间的等待,t1线程在等待t线程的结束,但是有超时限制,t2线程在等待t1的结束,没有超时时间,就是死等

我们使用java自带的jconsole程序可以查看当前的线程状态:

(需要注意的是,线程名因为没有定义,所以Thread-0代表t线程,Thread-1代表t1,Thread-2代表t2,默认线程名按照main线程顺序创建而定义)

t线程:

t1线程:

t2线程:

接下来我们再看看BLOCKED的状态场景(锁相关知识后续会提到,此次试验仅观看):

观察代码,让t1线程和t2线程同一把锁产生互斥,然后观察状态:

t1线程:

t2线程:

可以看到,当前是t2线程在阻塞等待t1线程,等到t1线程执行完释放锁才能轮到t2线程执行。

这就是BLOCKED的状态场景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(二十一)、Docker 部署 Minikube 使用可视化管理工具 Kuboard

文章目录 1、介绍docker 运行 minikube 集群节点(kube-apiserver )无法被直接访问的问题Kuboard 需要访问到 k8s 集群的kube-apiserver 2、安装 Kuboard2.1、k8s 集群节点可以被外部直接访问的情况2.1.1、下载镜像2.1.2、运行 deployment.yml2.1.3、访问…

滑动窗口子串

文章目录 滑动窗口一、无重复字符的最长子串二、找到字符串中所有字母异位词 子串三、和为 K 的子数组四、滑动窗口最大值五、最小覆盖子串 滑动窗口 一、无重复字符的最长子串 题目链接 (方法一:暴力枚举) (方法二&#xff…

机器学习—Logistic回归算法

目录 一、基本概念二、决策边界三、损失函数四、交叉熵(CrossEntropy)损失函数1、二分类问题的交叉熵损失函数2、多分类问题的交叉熵损失函数3、交叉熵损失函数的特点4、交叉熵损失函数的应用 五、模型参数求解六、Logistic函数的应用及优缺点1、应用场景…

【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)

本文项目编号 T 038 ,文末自助获取源码 \color{red}{T038,文末自助获取源码} T038,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用

一、前言 学习Qwen2-VL ,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。 Qwen2-VL 具有卓越的图…

C++——string的模拟实现(上)

目录 引言 成员变量 1.基本框架 成员函数 1.构造函数和析构函数 2.拷贝构造函数 3.容量操作函数 3.1 有效长度和容量大小 3.2 容量操作 3.3 访问操作 (1)operator[]函数 (2)iterator迭代器 3.4 修改操作 (1)push_back()和append() (2)operator函数 引言 在 C—…

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本:5.6、7.3 Mysql版本:5.6,5.7需要关闭严格模式 Nginx:任何版本 Redis:需要给所有PHP版本安装Redis扩展,不需要设置Redis密码 最好使用面板安装:宝塔面板 - 简单好用的…

深度学习中的迁移学习:优化训练流程与提高模型性能的策略,预训练模型、微调 (Fine-tuning)、特征提取

1024程序员节 | 征文 深度学习中的迁移学习:优化训练流程与提高模型性能的策略 目录 🏗️ 预训练模型:减少训练时间并提高准确性🔄 微调 (Fine-tuning):适应新任务的有效方法🧩 特征提取:快速…

AAPL: Adding Attributes to Prompt Learning for Vision-Language Models

文章汇总 当前的问题 1.元标记未能捕获分类的关键语义特征 如下图(a)所示, π \pi π在类聚类方面没有显示出很大的差异,这表明元标记 π \pi π未能捕获分类的关键语义特征。我们进行简单的数据增强后,如图(b)所示,效果也是如…

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日,财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…

【MySQL基础】数据的增删改查(CRUD)

文章目录 一、 插入数据1. 单条数据插入2. 批量插入数据3. 插入默认值4. 部分字段插入5. 总结 二、更新数据1. 基本的UPDATE语法2. 带多个字段的更新3. 批量条件更新4. 小心条件为空的更新教训 5. 一个实际例子:换专业的情况6. 总结 三、删除数据1. 删除特定数据&am…

基于SSM+微信小程序的社区垃圾回收管理系统(垃圾1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于ssm微信小程序的社区垃圾回收管理系统,有管理员,回收员,用户三个角色。 1、管理员功能有个人中心,用户管理,回收员管理&am…

java游戏第六天——总结

开始 我们先在这里创建五个java文件,后面创建一个文件夹存储图片,我就按照这几个文件作用展开描述 bg.java package common; import common.game_pic;import java.awt.Color; import java.awt.Graphics; public class bg {public void paintself(Graph…

Python数据分析——Numpy

纯个人python的一个小回忆笔记,当时假期花两天学的python,确实时隔几个月快忘光了,为了应付作业才回忆起来,不涉及太多基础,适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频: 一…

Python + 查看个人下载次数小工具 - 记录

目录 前言 一、演示 二、流程简述 1.CSDN网站自动登入 2.登入查询接口网站获取网页数据 3.处理HTML数据 4.完整业务执行程序 三、主程序 四、UI程序 前言 为了方便查看个人资源下载的数据,通过selenium控制浏览器 HTML网页源代码数据获取 数据分析 三个…

服务器虚拟化全面教程:从入门到实践

服务器虚拟化全面教程:从入门到实践 引言 在现代 IT 基础设施中,服务器虚拟化已成为一种不可或缺的技术。它不仅能够提高资源利用率,还能降低硬件成本,优化管理流程。本文将深入探讨服务器虚拟化的概念、技术、应用场景及其实现…

【ECMAScript标准】深入理解ES2023的新特性与应用

🧑‍💼 一名茫茫大海中沉浮的小小程序员🍬 👉 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️! 📑 目录 🔽 前言1️⃣ ECMAScript的演变与重要性2️⃣ ES2023的主要新特性概述3️⃣ 记…

[Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式

文章目录 Ansible介绍核心组件任务执行方式 实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录 常用工具ansibleansible—docansible—playbook 主要配置文件 Ansible 模…

安装Maven配置以及构建Maven项目(2023idea)

一、下载Maven绿色软件 地址:http://maven.apache.org/download.cgi 尽量不要选择最高版本的安装,高版本意味着高风险的不兼容问题,选择低版本后续问题就少。你也可以选择尝试。 压缩后: 打开后: 在该目录下新建mvn-…

【算法练习】最小生成树

题意&#xff1a;【模板】最小生成树 方法1&#xff1a;Prim算法(稠密边用优&#xff09; #include <bits/stdc.h> using namespace std; int n,m,u,v,d,ans; bool f[5001]; vector<pair<int,int>> a[5001];//用结构体和重载比直接定义小根堆似乎还快一点点…