当前位置: 首页 > 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.dtcms.com/a/330980.html

相关文章:

  • 数据结构之顺序表相关算法题
  • 【数据分享】351个地级市农业相关数据(2013-2022)-有缺失值
  • linux中date命令
  • SAP-ABAP:SAP消息系统深度解析:架构设计与企业级应用实践
  • Wireshark中捕获的大量UDP数据
  • 23.Linux : ftp服务及配置详解
  • (论文速读)DiffusionDet - 扩散模型在目标检测中的开创性应用
  • AI搜索重构下的GEO优化服务商格局观察
  • 李沐-第六章-LeNet训练中的pycharm jupyter-notebook Animator类的显示问题
  • 轻松同步 Outlook 联系人到 Android
  • 深入解析SAE自动驾驶分级标准(0-5级)及典型落地实例
  • Ubuntu 软件源版本不匹配导致的依赖冲突问题及解决方法
  • C++ 23种设计模式的分类总结
  • C++23输出革命:std::print的崛起与工业界标准滞后的现实困境
  • 18.12 BERT问答系统核心难题:3步攻克Tokenizer答案定位与动态填充实战
  • c/c++ UNIX 域Socket和共享内存实现本机通信
  • 2021睿抗决赛 猛犸不上 Ban
  • diffusers库学习--pipeline,模型,调度器的基础使用
  • 深入解析Prompt缓存机制:原理、优化与实践经验
  • Centos9傻瓜式linux部署CRMEB 开源商城系统(PHP)
  • 流式数据服务端怎么传给前端,前端怎么接收?
  • Keil 微库(MicroLib)深度解析
  • USB 3.0 协议层 包定义
  • 微软对传统网页设计工具在2010年停止开发
  • Sql server 命令行和控制台使用二三事
  • web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库
  • 一文讲透Go语言并发模型
  • Pytest本地插件定制及发布指南
  • Redis7学习--十大数据类型 bitmap、Hyperloglog、GEO、Stream、bitfield
  • PAT乙级_1073 多选题常见计分法_Python_AC解法_含疑难点