Java 线程的状态

线程状态

操作系统的线程

 

从上图可以详细分析出线程的五种状态以及状态之间的切换。
1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();

2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

3)运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

4)阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
2.同步阻塞 — 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞 — 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时. join()等待线程终止或者超时. 或者I/O处理完毕时,线程重新转入就绪状态。

5)死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

但是,在Java中如果涉及到线程状态往往其实指的是6种状态,而不是希望你讲的操作系统中定义的5种基本状态。 这是因为在源码中定义Thread State时就定义了现在的6中状态。
                        

但是,在Java中如果涉及到线程状态往往其实指的是6种状态,而不是希望你讲的操作系统中定义的5种基本状态。 这是因为在源码中定义Thread State时就定义了现在的6中状态。
一定要区分OS和JVM两个层面不同状态定义理解。

在Java中阻塞做了进一步的区分,如下图。

 

NEW 初始状态, 线程被构建,但是还没有调用start()方法RUNNABLE 可运行状态, 可运行状态包括运行中状态(RUNNING)和就绪状态(READY)

运行中状态(RUNNING) 表示处于该状态的的线程正在运行, 即相应线程对象的run方法所对应的指令正在由处理器执行 。当:
1. 操作系统执行yield()方法
2. 时间片用完
3. 来了更高优先级而被抢断
时就会变为就绪状态。
就绪状态(READY) 表示正在执行run()方法,可以通过系统调度来变为可运行状态。

BLOCKED 阻塞状态, 处于这个状态的线程需要等待其他线程释放锁或者等待进入synchronized

一个处于 blocked 状态的线程正在等待一个监视器锁以进入一个同步的块或方法。
一个处于 blocked 状态的线程正在等待一个监视器锁,在其调用 Object.wait 方法之后,以再次进入一个同步的块或方法。

WAITING 等待状态, 处于这个状态的线程需要等待其他线程对其进行通知或中断等操作,从而进入到下一个状态。

Object.wait():使当前线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。

Thread.join():等待线程执行完毕,底层调用的是Object实例的wait方法;
LockSupport.park():除非获得调用许可,否则禁用当前线程进行线程调度。

TIMED_WAITING 超时等待状态, 可以在一定时间内自行返回。

该状态和WAITING类似,差别在于处于该状态的线程并非无限制的等待其他线程执行特定操作,而是处于有时间限制的等待状态,当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程状态会自动转换为RUNNABLE
从状态切换图中可以知道调用以下方法将会进入超时等待状态:

Thread.sleep(long millis):使当前线程睡眠指定时间;
Object.wait(long timeout):线程休眠指定时间,等待期间可以通过notify()/notifyAll()唤醒;
Thread.join(long millis):等待当前线程最多执行millis毫秒,如果millis为0,则会一直执行;
LockSupport.parkNanos(long nanos):除非获得调用许可,否则禁用当前线程进行线程调度指定时间;
LockSupport.parkUntil(long deadline):同上,也是禁止线程进行调度指定时间;

TWEMINATED 终止状态, 当前线程执行完毕。

 

参考 理解Java线程状态(6种,6种,6种)_java线程的几种状态-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue3进阶】- 第2学堂小商城实战课程前言

该教程为进阶教程,如果你还不了解Vue3的基础知识,可以先前往Vue3基础教程,从入门到实战。 学习时遇到的任何疑问都欢迎在相应课文页面下方的问答区进行提问哦 我能学到什么? 编程写法千千万,实现需求是第一。 教程中…

智慧工地可视化解决方案(2)

系统功能 总体应用设计 系统业务分为中心管理、视频联网、人员管理、环境管理、起重机械管理、车辆管理。 每个业务对应一个或者多个硬件系统。中心管理为监控中心。视频联网包含视频联网监控和移动执法子系统。人员管理分为实名制考勤子系统和人员安全子系统(安全帽)。起…

5.11 Vue配置Element UI框架

Vue配置Element UI框架 目录一、 概要二、 开发前准备1. 搭建Vue框架 三、 安装 Element UI1. 引入 Element UI 依赖2. 在 main.js 中引入 Element UI 和相关样式:3. 按需引入(非必须, 可忽略)4. 简单构建一个主页面 目录 一、 概要 Element UI 是一个基于 Vue.js …

安卓Termux系统安装MariaDB结合内网穿透实现公网连接本地数据库

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…

SSM框架学习——Spring事务管理

Spring事务管理 概念 事务(Transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么都不执行,是一个不可分割的工作单元。 事务有如下特性: 原子性隔离性一致性持久性 …

116. 飞行员兄弟(递推+暴力)太难了不要求

输入样例&#xff1a; --- ---- ---- ---输出样例&#xff1a; 6 1 1 1 3 1 4 4 1 4 3 4 4 代码&#xff1a; #include<algorithm> #include<iostream> #include<cstring> #include<queue> #include<cmath> #define x first #define y second…

往word表格插入图片,表格大小如何不变形?

在word中进行大量图片排版时&#xff0c;往往会用到表格。然而在往word表格插入图片的过程中&#xff0c;表格往往会随图片大小自适应变化&#xff0c;如何保证图片自适应表格大小&#xff08;即图片按照所给定的表格大小自动缩放&#xff09;&#xff0c;解决方法如下&#xf…

小红书运营快捷回复工具

小红书作为一个热门的社交电商平台&#xff0c;吸引了众多品牌和个人用户进行运营和互动。而很多做小红书运营的姐妹&#xff0c;经常会有回评论懒得打字的困扰&#xff0c;为了提高回复评论和私信的效率&#xff0c;本文给大家推荐一款快捷回复工具&#xff0c;手机电脑都能用…

【Python使用】嘿马头条完整开发md笔记第3篇:数据库,1 新增【附代码文档】

嘿马头条项目从到完整开发笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;课程简介&#xff0c;ToutiaoWeb虚拟机使用说明1 产品介绍,2 原型图与UI图,3 技术架构,4 开发,1 需求,2 注意事项。数据库&#xff0c;理解ORM1 简介,2 安装,3 数据库连接…

电商新手选品易犯6大通病,85%的人都踩过雷!

电商选品是一个复杂而关键的过程&#xff0c;需要综合考虑多种因素&#xff0c;尤其对于刚刚涉猎电商行业的新手来更有难度&#xff0c;许多电商新手在选品过程中都会犯一些通病&#xff0c;以下是一些常见的电商选品通病以及调整建议&#xff0c;希望对大家有所帮助&#xff1…

《第一行代码 Android 第三版》 天气预报APP SunnyWeather——交作业

跟着书本手敲一遍kotlin项目SunnyWeather,MVVM架构&#xff1a; 没啥难度&#xff0c;就是熟悉kotlin... github链接&#xff1a;SunnyWeather/app at master xda1212/SunnyWeather GitHub

Vivado Lab Edition

Vivado Lab Edition 是完整版 Vivado Design Suite 的独立安装版本 &#xff0c; 包含在生成比特流后对赛灵思 FPGA 进行编程和 调试所需的所有功能。通常适用于在如下实验室环境内进行编程和调试&#xff1a; 实验室环境中的机器所含磁盘空间、内存和连 接资源较少。Vivad…

【环境搭建】(四)ubuntu22.04系统安装Opencv4.8.0+Opencv-contrib4.8.0

一个愿意伫立在巨人肩膀上的农民...... 一、安装下载所需工具 1.打开终端&#xff0c;输入以下命令来更新软件源&#xff1a; sudo apt-get update 2.安装wget&#xff1a; sudo apt-get install wget 3.下载opencv和opencv-contrib包&#xff1a; wget -O opencv-4.8.0.…

备忘录软件哪款可以加密?备忘录app怎么加密?

在快节奏的现代生活中&#xff0c;备忘录软件已成为我们不可或缺的助手。它不仅能方便我们随时记录任务事项&#xff0c;捕捉生活中的灵感&#xff0c;还便于我们随时修改和查看记录内容&#xff0c;实用性极高。然而&#xff0c;随着记录内容的增多&#xff0c;数据安全性问题…

【自动化测试】 环境部署和元素定位

写在前面 勤奋跟吃苦不一样&#xff0c;假如你对工作&#xff0c;生活不满意。就要跳出圈子&#xff0c;接触其它人或事物&#xff0c;提升自己。从而换个工作&#xff0c;或者换了心态看待问题。而不是&#xff0c;吃苦的加班逼着自己去内卷&#xff0c;卷来卷去觉得吃苦受累&…

Leetcode 309. 买卖股票的最佳时机含冷冻期

心路历程&#xff1a; 这道题的建模和股票问题一样&#xff0c;只不过需要在状态上增加一个处于冻结期&#xff1b; 状态&#xff1a;1第i天&#xff1b;2第i天持有股票的状态&#xff08;持有&#xff0c;不持有被冻结&#xff0c;不持有未被冻结&#xff09; 动作&#xff1…

基于SpringBoot餐饮美食分享平台的设计与实现+毕业论文+毕业答辩PPT+搭建资料

系列文章目录 本系统的用户可分为用户和管理员二个用户角色组成。管理员可以管理系统内所有功能&#xff0c;主要有系统首页、信息展示、用户信息管理、菜谱信息管理、笔记信息管理、美食信息管理、修改密码、退出登录管理、系统管理等功能&#xff1b;用户登录系统可以对个人…

实体机双系统安装

实体机双系统安装 第一步&#xff1a;下载openKylin镜像 前往官网下载x86_64的镜像&#xff08;https://www.openkylin.top/downloads/628-cn.html&#xff09; tips&#xff1a;下载完镜像文件后&#xff0c;请先检查文件MD5值是否和官网上的一致&#xff0c;如果不一致请重…

如何给图片添加水印?

如何给图片添加水印&#xff1f;在现代职场中&#xff0c;图片的使用已经成为了日常工作的一部分&#xff0c;而给图片添加水印也逐渐成为了一种常见的需求。无论是在设计、广告、营销还是其他领域&#xff0c;给工作中的图片加水印都有其重要性和实用性。工作中给图片加水印的…

系统分析师-软件的知识产权保护与标准化

文章目录 前言一、知识产权保护范围与对象二、保护期限三、知识产权人确定四、侵权判定五、标准化标准的分类标准的编号 前言 知识产权也称为“智力成果权”、“智慧财产权”&#xff0c;它是人类通过创造性的智力劳动而获得的一项权利。根据我国民法通则的规定&#xff0c;知识…