Java EE——线程状态

news/2025/3/31 22:25:00/

前言

从编写Java代码的角度来说,线程一共有六种状态;但是以操作系统的视角来看,线程状态可以分为物种

六种划分

在这里插入图片描述
调用getState()方法获取当前线程状态

一.NEW

定义:线程(对象)被创建但还没有启动

java">public class NEW {public static void main(String[] args) {Thread thread = new Thread(()->{});//thread创建完毕//NEWSystem.out.println(thread.getState());}
}

二.RUNNABLE

定义:线程创建并启动完毕,拥有执行代码的能力或者正在执行代码

java">public class RUNNABLE {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(()->{while (true){try {Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("Hello Thread");}});//调用startthread.start();//RUNNABLESystem.out.println(thread.getState());}
}

三.WAITING

定义:线程处于等待状态,等待其他线程执行完毕(join)或者其他线程来唤醒(notify)

java">public class WAITING {public static void main(String[] args) throws InterruptedException {Object locker = new Object();Thread thread = new Thread(()->{synchronized (locker){try {//无时间参数的waitlocker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}});thread.start();Thread.sleep(100);//WAITINGSystem.out.println(thread.getState());}
}

四.TIMED_WAITING

定义:线程处于等待状态

  1.  等待其他线程执行完毕(join)
    
  2.  其他线程来唤醒(notify)
    
  3.  等待一定的时间后自动唤醒
    
java">public class TIMED_WAITING {public static void main(String[] args) throws InterruptedException {Object locker = new Object();Thread thread = new Thread(()->{synchronized (locker){try {//有时间参数的waitlocker.wait(10000000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});thread.start();Thread.sleep(100);//System.out.println(thread.getState());}
}

五.BLOCKED

定义:线程竞争锁对象失败进入BLOCKED(锁竞争)状态

java">public class BLOCKED {public static void main(String[] args) throws InterruptedException {Object locker = new Object();Thread thread1 = new Thread(()->{synchronized (locker){try {Thread.sleep(1000000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});thread1.start();//thread1先拿到locker锁对象Thread thread2 = new Thread(()->{while (true) {synchronized (locker) {System.out.println("Hello Thread2");}}});thread2.start();//sleep(1000)的作用是让thread2有足够用的时间执行到synchronizedThread.sleep(100);//获取线程状态//BLOCKEDSystem.out.println(thread2.getState());}
}

六.TERMINATED

定义:线程执行完毕或者因异常退出

java">public class TERMINATED {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(()->{});thread.start();//等待线程执行完毕thread.join();//TERMINATEDSystem.out.println(thread.getState());}
}

五种划分

在这里插入图片描述

一.新建

和NEW一样

二.就绪

CPU已经为线程分配好了时间,但还没来得及执行代码

三.运行

CPU已经为线程分配好了时间,并且正在执行代码
在这里插入图片描述

四.阻塞

线程启动完毕,但被暂停执行(可能是自身原因,也可能是外部原因),有以下几种情况
1.等待其他线程释放锁对象
2.等待文件IO,如
在这里插入图片描述
3.调用wait(无参数/有参数)方法

五.终止

和TERMINATED一样,线程执行完毕或者被强制终止


http://www.ppmy.cn/news/1583964.html

相关文章

k近邻算法K-Nearest Neighbors(KNN)

算法核心 KNN算法的核心思想是“近朱者赤,近墨者黑”。对于一个待分类或预测的样本点,它会查找训练集中与其距离最近的K个样本点(即“最近邻”)。然后根据这K个最近邻的标签信息来对当前样本进行分类或回归。 在分类任务中&#…

ElasticSearch -- 部署完整步骤

前期准备 创建用户: sudo useradd hadoop sudo passwd hadoop# 密码 xxx系统层面,禁用内存交换 sudo swapoff -a修改 sudo vi /etc/security/limits.conf hadoop hard memlock unlimited hadoop soft memlock unlimited hadoop soft nofile 65536 had…

【bug解决】NameError: name ‘fused_act_ext‘ is not defined

问题 使用basicsr库做超分的时候发现NameError: name fused_act_ext is not defined这个问题,一直不断重复的使用pip uninstall basicsr 和 BASICSR_EXTTrue pip install basicsr 发现一直没有执行编译过程,导致一直推理失败 原因 之前已经安装过basi…

【Python3教程】Python3基础篇之Lambda(匿名函数)

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

Redis 中的过期策略和内存淘汰策略

过期策略 Redis 的 过期策略(Expiration Policy)决定了 如何管理和删除已过期的 key,确保内存资源的合理使用。Redis 提供了 三种过期策略: 1. 惰性删除(Lazy Deletion) 特点:只有当客户端访问…

YOLO历代发展 图像增强方式 架构

YOLO1 YOLOV5 数据增强 mosaic 仿射变换(Affine)、透视变换(Perspective) 网络搭建

使用idea开发spark程序

新建scala 项目 创建lib目录 将spark jars/ 路径下所有jar 复制到 lib目录 添加依赖 创建scala 程序 package sparkimport org.apache.spark.{SparkConf, SparkContext}object WordCount {def main(args: Array[String]): Unit {val conf new SparkConf().setAppName(&q…

【STM32】初识STM32

目录 1、 什么是STM321.1、STM32的字面含义1.2、STM32诞生的背景 2、STM32能做什么2.1、STM32有什么2.2、身边常见的电子产品 3、STM32怎么选型3.1、STM32分类3.2、ST的32位微控制器产品线3.2.1、STM32F103VET6 3.3、STM32的命名方法3.4、如何分配原理图引脚3.5、数据手册中对引…