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

【多线程】线程的状态

我们可以通过下面的这段代码来查看线程一共有哪几种状态

//线程的状态是一个枚举类型 Thread.State
for(Thread.State state : Thread.State.values()){System.out.println(state);
}

在这里插入图片描述

NEW(新建状态): 当线程对象已经被创建,但是 start() 方法还没有被调用。
RUNNABLE(就绪状态):当线程已经调用了 start() 方法,线程已经在cpu上运行或等待运行。
TERMINATED(终止状态):说明当前线程已经工作结束,Thread 对象还在,但是内核上的线程已经销毁了。
TIMED_WAITING(有时限等待状态):与 WAITING 类似,但有一个超时时间限制,通常是由于调用了 sleep() wait(timeout) join(timeout) 等固定时间产生的阻塞。
WAITING(等待状态):当线程等待某个特定条件的发生,通常是由于调用了 wait()、join()或 park()等方法时,线程处于等待状态。
BLOCKED(阻塞状态):由锁竞争导致的阻塞。

我们来看下面的代码

public class demo {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{for (int i = 0; i < 10; i++) {try {//此时t线程在sleep中获取的状态 可能是RUNNABLE 也可能是 TIMED_WAITINGThread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}});System.out.println("t线程调用前状态:"+t.getState());//启动t线程t.start();//循环获取状态 总会把这两种状态都获取到 具体获取到哪个状态取决于系统调度for (int i = 0; i < 20; i++) {System.out.println("线程执行中状态:"+t.getState());}//让主线程等待t线程执行完t.join();//获取t线程结束后的状态System.out.println("t线程结束后:"+t.getState());}
}

在这里插入图片描述
在这里插入图片描述

在创建一个线程还没有start()的时候 ,它的状态就是 NEW ,调用start() 后也就是意味着线程进入就绪状态 也就是 RUNNABLE,等待系统调度。当执行任务时,遇到了 sleep() ,这个时候线程不会被分配cpu资源,此时线程的状态是 TIMED_WAITING ,当线程的任务执行完毕时也就是run() 方法结束,此时线程状态是 TERMINATED

http://www.lryc.cn/news/194845.html

相关文章:

  • pytorch 对图片进行归一化处理
  • 零售数据分析师熬夜整理:人、货、场、供、财这样做
  • 基于SSM的学生选课管理系统
  • SQL注入漏洞
  • C++ wpf自制软件打包安装更新源码实例
  • 8月19日PMP成绩,预计10月16日公布!附查询入口、流程
  • 简易LDO设计(包含原理图、PCB和实验)
  • SpringBoot面试题5:SpringBoot Starter的工作原理是什么?
  • Leetcode 2902. Count of Sub-Multisets With Bounded Sum
  • ARP协议(地址解析协议) 的作用和操作过程
  • 轻游戏风格虚拟资源付费下载模板Discuz论坛模板
  • MongoDB索引操作
  • AMEYA360:君正低功耗AIoT图像识别处理器—X1600/X1600E
  • EM@圆和圆锥曲线的参数方程
  • uniapp 微信小程序 vue3.0+TS手写自定义封装步骤条(setup)
  • Python 金融大数据分析
  • 初识C++入门(1)
  • 使用Selenium的WebDriver进行长截图
  • python+大数据校园卡数据分析 计算机竞赛
  • 【机器学习】sklearn降维算法PCA
  • 华为云云耀云服务器L实例评测|企业项目最佳实践之评测用例(五)
  • Xcode升级到15.0 解决DT_TOOLCHAIN_DIR问题
  • 小谈设计模式(29)—访问者模式
  • 【25】c++设计模式——>责任链模式
  • GlobalTransactional
  • Android Studio运行kotlin项目,一直Read timed out
  • Excel 的单元格内容和单元格格式
  • 4大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)
  • armbian 安装mysql
  • Ubuntu22常用软件