【JavaEE】多线程 -- 线程状态

目录

  • 六大状态
    • 举例说明

六大状态

  • New 新建状态:线程还没出创建,只有Thread 实例化的对象,调用start 方法之前的状态。
  • Runnable 运行状态:被系统调度后,CPU 正在执行的,Ready 就绪态,系统调度,随时准备被CPU 执行。
  • Blocked 阻塞状态:线程遇到某种机制之后不参与 CPU的调度执行,等待某个条件的触发唤醒线程
  • waiting 等待状态: 无限期等待(死等)
  • Time_Waiting 超时等待状态:设置了最大等待时间,超出最大等待时间就换醒线程
  • Terminated 终止状态:线程生命周期结束后的状态

在这里插入图片描述

举例说明

  • 接下来我说一个例子来说一下这几个关于线程的状态

阿杰和千均(两个线程)都喜欢上了小美, 两个人心里面都打算怎么追到小美(new 新建状态), 之后他们时刻关注着小美的动态,等着合适的机会接近(线程 READY 就绪状态, 准备如何追到小美)。
小美周末一个人去图书馆,阿杰觉得机会来了,主动上前打招呼并提出一起学习(线程的运行状态, 达成与小美做事, 处于追到小美的运行)。聊天过程中,阿杰想约小美晚上看电影,可小美说要先回宿舍问室友有没有空,一起的话更热闹,阿杰只好等着小美回复(导致当前追求步骤暂停(线程堵塞)的原因是:等待小美询问室友的结果, 小美没说具体时间是多久)。
因为阿杰暂时等不到小美答复,没法继续推进约会的事,所以陷入
阻塞等待
(等小美回消息)。这时候千均看到小美在图书馆外打电话,赶紧走过去递上一杯热奶茶(此时相当于 CPU 调度切换,千均从就绪状态进入运行状态)。千均和小美聊得不错,想约她下周去看画展,小美说下周要准备考试,得考完试才行,大概一周后有空,此时千均线程陷入了等待状态,具有时效性,线程需要等一周就可以继续执行了),一周后千均就可以再约小美去看画展。
这边千均等待的时候,小美给阿杰回了消息,说室友有空,晚上可以一起去看电影,阿杰收到消息后(忽略初始的心理准备),重新调整状态,准备晚上的约会安排(阿杰获得继续追求的条件,从阻塞状态中唤醒,来到就绪状态准备进一步行动)。到了晚上,阿杰和小美以及她的室友一起看完电影,可小美说 “我和室友一起走就行,你先回去吧,明天再说”,此时阿杰知道要等明天才有机会,于是进入等待状态(有明确的等待节点,知道第二天可以再尝试)。​
第二天,阿杰联系小美时,发现小美正在忙社团活动,没回消息,阿杰只能等着她忙完(此时又进入阻塞状态,因为不知道小美具体什么时候忙完,只能被动等待回复)。过了几个小时,小美回复说活动结束了,阿杰赶紧抓住机会约她吃饭,小美同意了。吃饭时阿杰好好表现,之后两人关系逐渐升温,阿杰成功追到了小美,这个追求线程也就结束了(线程结束状态)。
但是千均成了小丑, 还处于等待状态, 等待一个星期之后呢, 但是一个星期之后阿杰牵着小美的手出现在千均面前, 千均看到小美过来等待成功, 这个时候看到阿杰和小美的动作已经知道没机会了, 千均就进入了(线程结束状态)

package thread;
import static java.lang.Thread.sleep;
public class ThreadDemo18 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {for(int i = 0; i < 5; i++) {System.out.println("线程执行中...");try {sleep(1000);}catch (InterruptedException e) {e.printStackTrace();}}});//线程启动之前, 状态就是 NEWSystem.out.println(t.getState());t.start();System.out.println(t.getState());sleep(500);System.out.println(t.getState());t.join();//线程运行完毕, 状态就是 TERMINATEDSystem.out.println(t.getState());}
}

在这里插入图片描述

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

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

相关文章

网络流初步

网络流初步 文章目录网络流初步概念介绍最大流费用流概念介绍 网络流不同之处在于它的本质图论&#xff0c;但是把图论的某些概念换了一个说法而已&#xff0c;初步只要了解网络流的各个概念就可以明白的很快。 下述概念是本人自己定义的&#xff0c;对于网络流的题目做的还不…

[系统架构设计师]系统架构基础知识(一)

[系统架构设计师]系统架构基础知识&#xff08;一&#xff09; 一.计算机系统基础知识 1.计算机系统概述 硬件软件及网络组成的系统 2.计算机硬件基础知识 冯 诺依曼结构&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备 专用…

深入解析Java代理模式:灵活控制对象访问的核心技术

在日常开发中&#xff0c;我们常遇到这样的场景&#xff1a;需要控制对象访问权限、优化高成本操作&#xff0c;或给方法添加额外功能&#xff08;如日志、事务&#xff09;。代理模式&#xff08;Proxy Pattern&#xff09; 正是解决这类问题的金钥匙。作为结构型设计模式的代…

【学习笔记】Java并发编程的艺术——第9章 Java中的线程池

第9章 Java中的线程池 线程池优势&#xff1a; ①减少资源消耗 ②提高响应速度 ③统一管理 9.1 线程池的实现原理 当任务来后 ①判断核心线程池是否已满&#xff0c;若未满&#xff0c;创建一个核心线程来执行任务 ②若无空闲核心线程且核心线程已满&#xff0c;则将任务放入任…

Mybatis学习笔记(九)

常见问题与解决方案 简要描述&#xff1a;总结MyBatis-Plus开发过程中常见的问题、错误及其解决方案&#xff0c;帮助开发者快速定位和解决问题。 核心概念&#xff1a; 常见错误&#xff1a;开发中经常遇到的错误类型性能问题&#xff1a;性能相关问题的排查和解决配置问题&am…

数据类型 list

一、介绍类似于数组&#xff0c;顺序表&#xff0c;deque结构图特点&#xff1a;元素有序&#xff0c;元素允许重复由于头尾高效插入删除&#xff0c;可以模拟栈&#xff0c;队列二、常见 list 命令1、lpush key elem [elem ...]头插元素&#xff0c;返回值列表长度2、lrange k…

pyqt5无法显示opencv绘制文本和掩码信息

背景&#xff1a;pyqt5无法显示opencv绘制的标签和mask&#xff1b;我们在使用YOLO做实例分割做推理时&#xff0c;会使用opencv做后处理结果绘制&#xff08;含标签绘制和掩码绘制&#xff09;&#xff1b;结果opencv绘制的解码却无法在pyqt的解码上面显示。pyqt转换代码如下&…

如何生成严格递增的分布式id?

本文字数&#xff1a;2604字预计阅读时间&#xff1a;15分钟01引言在现有分布式系统中&#xff0c;面对增长迅速的业务数据&#xff0c;id生成一直是非常重要的一环。而分布式系统的id生成方案需要满足几个重要特性&#xff1a;容错高可用、高性能高并发、全局唯一。02技术背景…

【LeetCode】二叉树相关算法题

目录1、二叉树介绍【1】核心概念【2】关键特性2、算法题【1】二叉树的前序遍历【2】二叉树的后序遍历1、二叉树介绍 【1】核心概念 结构含义节点结构二叉树由节点组成&#xff0c; 每个节点包含一个数据元素和最多两个子节点&#xff1a;左子节点和右子节点根节点树的顶部节点…

Vulnhub Deathnote靶机复现攻略

一、靶机安装 下载地址&#xff1a;https://download.vulnhub.com/deathnote/Deathnote.ova 下载好后使用VB打开&#xff0c;配置如下 二、主机发现 使用相同连接方式的kali进行后续操作(172.16.2.7)根据mac地址进行确认。 nmap -sn 172.16.2.1/24 三、端口扫描 端口开放了…

DevEco Studio 6.0.0 元服务页面跳转失败

背景&#xff0c;我使用最新的编辑器DevEco Studio 6.0.0&#xff0c;编写一个元服务&#xff0c;发现使用跳转页面的时候失败了&#xff01;然后查看官方文档&#xff0c;两种方式都测试了&#xff0c;发现都不行。 方法1&#xff1a;Navigation路由跳转无效&#xff0c;见官方…

docker重启或系统重启后harbor自动启动

docker重启或系统重启后harbor自动启动docker重启或系统重启后harbor自动启动方法 1&#xff1a;在 docker-compose.yml 中配置重启策略&#xff08;推荐&#xff09;方法 2&#xff1a;创建 Systemd 服务&#xff08;更可靠&#xff09;方法 3&#xff1a;使用 Docker 的 Rest…

OpenZeppelin Contracts 架构分层分析

OpenZeppelin Contracts 是一个面向以太坊&#xff08;及兼容 EVM 的区块链&#xff09;生态系统的​​模块化、安全性优先、标准兼容的智能合约库​​。其内部代码按照功能职责与抽象层级&#xff0c;可系统性地划分为多个逻辑层次。理解这些层次及其依赖关系&#xff0c;对于…

Java-JVM的内存模型

一.JVM内存模型JVM内存模型可以从进程生命周期和线程生命周期1.线程生命周期每个线程都会有自己各自一份数据&#xff0c;不会存在线程安全问题1.程序计数器指示当前线程执行的字节码指令的行号&#xff0c;以便线程执行时可以回到正确的位置2.虚拟机栈线程私有的&#xff0c;与…

Highcharts Dashboards | 打造企业级数据仪表板:从图表到数据驾驶舱

企业日常决策、产品运营、业务监控&#xff0c;越来越依赖数据驱动。而仪表板&#xff08;Dashboard&#xff09;作为汇总展示多维度信息的“数据驾驶舱”&#xff0c;已成为企业可视化的核心场景之一。如果你正在寻找一款能够快速、灵活、安全构建仪表板的前端图表工具&#x…

基于Java的Markdown转Word工具(标题、段落、表格、Echarts图等)

项目源于我们开发的一款基于大模型的报告生成工具。由于需要将 Markdown 格式的内容导出为 Word 文档&#xff0c;而市面上缺乏合适的现成工具&#xff0c;所以决定自己开发一个Markdown转Word的工具。 &#x1fa77;源码地址&#xff1a;daydayup-zyn/md2doc-plus &#x1f…

Unity:PlayerPrefs笔记

写在前面&#xff1a;写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解&#xff0c;方便自己以后快速复习&#xff0c;减少遗忘。一、PlayerPrefs的基本方法1、存储相关PlayerPrefs的数据存储类似于键值对存储&#xff0c;一个键对应一个值。Unity…

SQL tutorials

SQL Literature SQL运行在资料库管理系统&#xff08;Database Management System&#xff09;&#xff0c;如MySQL&#xff0c;Postgre SQL&#xff0c;Microsoft SQL Server&#xff0c; Oracle&#xff0c;etc。 SQL练习平台&#xff1a;https://sqliteviz.com/ EXAMPLE SQL…

MySQL快速恢复数据的N种方案完全教程

目录 1. 理解MySQL数据恢复的核心逻辑 1.1 数据丢失的常见场景 1.2 MySQL的“救命稻草”:关键文件和机制 2. 方案一:利用全量备份+binlog实现点对点恢复 2.1 准备工作 2.2 恢复步骤 2.3 实战案例 3. 方案二:利用InnoDB的崩溃恢复机制 3.1 崩溃恢复的原理 3.2 恢复步…

双屏加固笔记本电脑C156-2:坚固与高效的完美融合

在当今数字化时代&#xff0c;笔记本电脑已成为人们工作和生活中不可或缺的工具。然而&#xff0c;对于一些特殊行业和恶劣环境下的应用场景&#xff0c;普通笔记本电脑往往难以满足需求。此时&#xff0c;具备坚固耐用、高性能等特点的加固笔记本电脑应运而生。鲁成伟业的双屏…