线程的状态

ops/2024/9/23 4:29:43/

1.线程状态的种类

  • NEW:Thread 对象有了,调用 start系统内部的线程还未创建。
  • RUNNABLE:指的是,这个线程"随叫随到"。
    a)这个线程正在 CPU 上执行
    b)这个线程虽然没在 CPU 上执行,随时可以调度到 CPU 上执行
  • BLOCKED:进行锁竞争的时候产生的阻塞(本文暂不涉及)
  • WAITING:死等进入阻塞状态
  • TIMED_WAITING:超时等待进入阻塞状态
  • TERMINATED:线程已经终止了(内核中的线程已经销毁了,Thread 对象还在)

 2.线程每种状态之间的关系

 1.NEW状态

java">     public static void main(String[] args) {Thread t=new Thread(()->{System.out.println("tjchs");});System.out.println(t.getState());t.start();}

2.RUNNABLE状态

还是原来那个代码,只不过多加了一行,运行结果就不一样了 

java">     public static void main(String[] args) throws InterruptedException {Thread t=new Thread(()->{System.out.println("tjchs");});System.out.println(t.getState());t.start();System.out.println(t.getState());}

 

可以看到t线程start之前其实有个RUNNALE状态,然后立马就执行了。(就像是跑步比赛,开跑前都要处于一个起跑的就绪状态,信号枪一响就立马跑起来)

3.TERMINATED状态

在上个代码的基础上加了个t.join(为了保证t线程已经执行完),可以看到线程处于TERMINATED(终止)状态。

java">    public static void main(String[] args) throws InterruptedException {Thread t=new Thread(()->{System.out.println("tjchs");});System.out.println(t.getState());t.start();t.join();System.out.println(t.getState());}

4. WAITING状态

java">    public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {while (true) {System.out.println("tjchs");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();t.join();}

 这个状态从代码结果不是很好看出来,需要借助jconsole这个工具来看

如何通过jconsole看线程状态: 

 1.根据路径找到jconsole.exe

 

 2.选择当前运行的线程,然后点连接

3.会出现一个新的框,点击 不安全的连接

4.选择线程,点击main可看到当前线程状态的文字描述

可以看到这个 

此时线程处于WAITING(死等)状态 

5. TIMED_WAITING状态 

java">    public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {while (true) {System.out.println("tjchs");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();t.join(3600*1000);}

 重复之前的步骤,可以看到此时线程处于TIMED_WAITING状态 

总结:

线程之间每种状态的关系大致如此 

 


http://www.ppmy.cn/ops/19587.html

相关文章

asp.net core 自定义过滤器 注入的几种方式和实现

在 ASP.NET Core 中,过滤器(Filters)是一种在 MVC 应用程序中运行代码的方法,可以在操作(Actions)执行之前或之后运行。过滤器可以应用于控制器(Controllers)或特定的操作方法。过滤…

小程序APP屏幕悬浮按钮可拖动可展开

示例&#xff1a; 插件地址&#xff1a;suspensionButton 悬浮按钮 - DCloud 插件市场 使用方式&#xff1a; import pxSuspenButton from /components/px-suspen-button/index components: { pxSuspenButton }, <pxSuspenButton :centerIcon"centerIcon" :bgCo…

已解决:ModuleNotFoundError : No module named ‘pandas 亲测有效!!!

已解决&#xff1a;ModuleNotFoundError : No module named ‘pandas 亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 报错问题报错原因解决方法 报错问题 当您遇到 ModuleNotFoundError: No module named pandas 错误时&#xff0c;这意味着Python环境中没有安装pan…

【无标题】设备开关指示灯状态智能识别是什么意思---豌豆云

本文将详细解释设备开关指示灯状态智能识别的含义&#xff0c;介绍其工作原理及在各个领域的应用&#xff0c;旨在帮助大家更好地理解这一前沿技术。 随着科技的不断发展&#xff0c;智能化已经成为了现代生活的重要特征。 在设备监控与管理领域&#xff0c;设备开关指示灯状…

react,Chart

一、基础图&#xff1a;https://ant-design-charts.antgroup.com/ Ant Design Charts 1. 首先要下载ant-design/charts&#xff0c;然后在页面中添加如下柱状图代码: import React from react; import { Column } from ant-design/chartsconst DemoColumn: React.FC () …

Docker常用命令(镜像、容器)

一、镜像 1.1 存出镜像 1.2 载入镜像 1.3 上传镜像 二、容器 2.1 容器创建 2.2 查看容器的运行状态 ​2.3 启动容器 2.4 创建并启动容器 2.5 在后台持续运行 docker run 创建的容器 2.6 终止容器运行 2.7 容器的进入 ​2.8把宿主机的文件传入到容器内部 2.9 从容器…

【VSCode调试技巧】Pytorch分布式训练调试

最近遇到个头疼的问题&#xff0c;对于单机多卡的训练脚本&#xff0c;不知道如何使用VSCode进行Debug。 解决方案&#xff1a; 1、找到控制分布式训练的启动脚本&#xff0c;在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.…

【继承和多态】

闭上眼睛&#xff0c;什么都不听.............................................................................................................. 文章目录 前言 一、【继承】 1.1【继承的概念】 1.2【 继承的定义】 1.2.1【定义格式】 1.2.2【继承关系和访问限定符】 1.2…