并发编程-线程状态
2021/12/26 9:07:46
本文主要是介绍并发编程-线程状态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在不同层面上解读线程状态就可以得到不同的结果
- 操作系统层面:五种状态
- Java API层面: 六种状态
五种状态
-
【初始状态】
仅是在语言层面创建了线程对象,还未与操作系统线程关联 -
【可运行状态】
(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行 -
【运行状态】
指获取了 CPU 时间片运行中的状态- 当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换
-
-
【阻塞状态】
- 如果调用了阻塞 API,如 BIO 读写文件,这时该线程实际不会用到 CPU,会导致线程上下文切换,进入【阻塞状态】
- 等 BIO 操作完毕,会由操作系统唤醒阻塞的线程,转换至【可运行状态】
- 与【可运行状态】的区别是,对【阻塞状态】的线程来说只要它们一直不唤醒,调度器就一直不会考虑调度它们
-
【终止状态】
表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态
六种状态
这是从 Java API 层面来描述的. 根据 Thread.State
枚举,分为六种状态
-
NEW
线程刚被创建,但是还没有调用 start() 方法 -
RUNNABLE
当调用了 start() 方法之后,注意,Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的【可运行状态】
、【运行状态】
和【阻塞状态】
(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为是可运行) -
BLOCKED
,WAITING
,TIMED_WAITING
都是 Java API 层面对【阻塞状态】
的细分 -
TERMINATED
当线程代码运行结束
进程状态
-
NULL -> 创建状态:⼀个新进程被创建时的第⼀个状态;
-
创建状态 -> 就绪状态:当进程被创建完成并初始化后,⼀切就绪准备运⾏时,变为就绪状态,这个过程是很快的;
-
就绪态 -> 运⾏状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运⾏该进程;
-
运⾏状态 -> 结束状态:当进程已经运⾏完成或出错时,会被操作系统作结束状态处理;
-
运⾏状态 -> 就绪状态:处于运⾏状态的进程在运⾏过程中,由于分配给它的运⾏时间⽚⽤完,操作系统会把该进程变为就绪态,接着从就绪态选中另外⼀个进程运⾏;
-
运⾏状态 -> 阻塞状态:当进程请求某个事件且必须等待时,例如请求 I/O 事件;
-
阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;
-
阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
-
就绪挂起状态:进程在外存(硬盘),但只要进⼊内存,即刻⽴刻运⾏;
这篇关于并发编程-线程状态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程