Java线程状态与状态转换

前言

在Java中,线程是多任务处理的基本单位,它可以并行执行多个任务。线程的状态描述了线程在其生命周期中的不同阶段。Java线程的状态可以分为以下几种:

线程状态

状态解释
新建状态(New)线程被创建但尚未启动
就绪状态(Runnable)线程已经创建并调用了start()方法,但仍然需要等待CPU的执行时间
运行状态(Running)线程获得了CPU的执行时间,正在执行任务
阻塞状态(Blocked)线程因为某些原因被暂停执行,例如等待输入、等待其他线程的锁释放等
等待状态(Waiting)线程因为等待某个条件满足而暂停执行,例如等待其他线程的通知
定时等待状态(Timed Waiting)线程因为等待某个条件满足一段指定的时间而暂停执行
终止状态(Terminated)线程已经执行完任务或因异常而终止

这些状态定义在枚举 java.lang.Thread.State 上:

public enum State {NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED;
}

很多文章都是指说理论,我这里直接贴代码,运行以下代码就能打印线程的 6 种状态:

public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {Thread t = Thread.currentThread();System.out.println("就绪状态:" + t.getState());LockSupport.park();// 200 毫秒LockSupport.parkNanos(200000000);synchronized (Object.class) {// 空实现即可}});// 让另一个线程获取到锁,这样就能模拟线程1阻塞new Thread(() -> {synchronized (Object.class) {try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {throw new RuntimeException(e);}}}).start();System.out.println("新建状态: " + t1.getState());t1.start();TimeUnit.MILLISECONDS.sleep(100);System.out.println("等待状态: " + t1.getState());LockSupport.unpark(t1);TimeUnit.MILLISECONDS.sleep(100);System.out.println("超时等待状态: " + t1.getState());TimeUnit.MILLISECONDS.sleep(200);System.out.println("阻塞状态: " + t1.getState());TimeUnit.SECONDS.sleep(4);System.out.println("终止状态: " + t1.getState());}

输出结果:

新建状态: NEW
就绪状态:RUNNABLE
等待状态: WAITING
超时等待状态: TIMED_WAITING
阻塞状态: BLOCKED
终止状态: TERMINATED

最后附上线程状态转换图(发现 process on 有比较好的图,直接用了)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复习第五课 C语言-初识数组

目录 【1】初识数组 【2】一维数组 【3】清零函数 【4】字符数组 【5】计算字符串实际长度 练习: 【1】初识数组 1. 概念:具有一定顺序的若干变量的集合 2. 定义格式: 数组名 :代表数组的首地址,地址常量&…

“AI+教育”:景联文科技高质量教育GPT题库助力教学创新

去年年底,OpenAI推出ChatGPT,掀起AI热潮,教育作为“AI”应用落地的关键场景,再次受到广泛关注。 “AI教育”的快速发展,是受到技术、需求和政策三重因素共同驱动的结果。 在技术方面,随着人工智能技术的不断…

【专题速递】在线K歌、云化XR、咔嚓剪辑和FFmpeg直播能力更新计划

// 在线K歌的技术方案选型有哪些?对于沉浸式XR我们又有什么新的思考?高性能低依赖的剪辑视频需要具备什么技术?7月29日LiveVideoStackCon2023上海站客户端体验与性能优化专场,为您解答。 客户端体验与性能优化 客户端作为直接面…

基于Python编写一个B站全自动抽奖的小程序

本文将利用Python编写一个B站全自动抽奖的小程序,可以实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不错过任何一个可以暴富的机会了。需要的可以参考一下 导语 应好友邀请,帮他写…

Qt 桌面系统设计

文章目录 前言一、项目介绍二、界面布局三、按键图标四、桌面背景五、实现led功能总结 前言 这篇文章介绍 一个Qt 桌面系统的项目,大家可以在此基础上加以改进,实现更多的功能。 一、项目介绍 可以看到 这个桌面系统上分为两部分,左边是 三个…

C++虚函数学习

VC6新建一个单文档工程; 添加一个一般类; 生成的Shape.cpp保持不变; #include "Shape.h"#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]__FILE__; #define new DEBUG_NEW #endif// // Construction/Destruction //Shap…

基于C/S架构工作原理序号工作步骤和理论的区别

基于C/S架构工作原理序号工作步骤和理论的区别 SSH 概念 对称加密linux 系统加密,就是加密和揭秘都是使用同一套密钥。 非对称加密有两个密钥:“私钥”和“公钥”。私钥加密后的密文,只能通过对应的公钥进行揭秘。而通过私钥推理出公钥的…

MyBatis 的架构

MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架,可以将 SQL 语句和 Java 代码进行分离,通过 XML 或注解的方式配置 SQL 语句并执行,从而实现数据访问的功能。MyBatis 的架构包括以下几个部分: SqlSessionFactory&#xff…

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片(Shards)2.2、副本(Replicas)2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

CAD2021安装教程适合新手小白【附安装包和手册】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载文件二、使用步骤1.安装软件前,断开电脑网络(拔掉网线、关闭WIFI)2、鼠标右击【AutoCAD2021(64bit)】压缩包选择【解…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么? 2.为什么需要docker? 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images(镜像) Cont…