并发编程-线程状态
作者:互联网
在不同层面上解读线程状态就可以得到不同的结果
- 操作系统层面:五种状态
- 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 事件;
-
阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;
-
阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
-
就绪挂起状态:进程在外存(硬盘),但只要进⼊内存,即刻⽴刻运⾏;
标签:状态,操作系统,编程,并发,线程,进程,阻塞状态,就绪 来源: https://www.cnblogs.com/mpyidudu/p/15732098.html