当前位置: 首页 > news >正文

【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.lryc.cn/news/621225.html

相关文章:

  • 纸箱拆垛:物流自动化中的“开箱密码”与3D视觉的智能革命
  • 面试题之项目中灰度发布是怎么做的
  • Flink on YARN启动全流程深度解析
  • 会议通信系统核心流程详解(底稿1)
  • Linux软件编程:进程和线程
  • C#面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • Flink Stream API 源码走读 - socketTextStream
  • 2025H1手游市场:SLG领涨、休闲爆发,何为出海新航道?
  • 广告灯的左移右移
  • Day43 复习日
  • FPGA+护理:跨学科发展的探索(五)
  • Kotlin Data Classes 快速上手
  • 【深度学习】深度学习基础概念与初识PyTorch
  • 报数游戏(我将每文更新tips)
  • IPTV系统:开启视听与管理的全新篇章
  • 14 ABP Framework 文档管理
  • 【软考中级网络工程师】知识点之入侵防御系统:筑牢网络安全防线
  • SpringMVC(详细版从入门到精通)未完
  • P5967 [POI 2016] Korale 题解
  • 【数据分享】2014-2023年长江流域 (0.05度)5.5km分辨率的每小时日光诱导叶绿素荧光SIF数据
  • stm32项目(28)——基于stm32的环境监测并上传至onenet云平台
  • LT3045EDD#TRPBF ADI亚德诺 超低噪声LDO稳压器 电子元器件IC
  • web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库
  • 模型选择与调优
  • 0814 TCP和DUP通信协议
  • 2021睿抗决赛 猛犸不上 Ban
  • 十分钟学会一个算法 —— 快速排序
  • ASCII与Unicode:编码世界的奥秘
  • 【前端工具】使用 Node.js 脚本实现项目打包后自动压缩
  • C#WPF实战出真汁02--登录界面设计