在不同层面上解读线程状态就可以得到不同的结果
【初始状态】
仅是在语言层面创建了线程对象,还未与操作系统线程关联
【可运行状态】
(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行
【运行状态】
指获取了 CPU 时间片运行中的状态
-【阻塞状态】
【终止状态】
表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态
这是从 Java API 层面来描述的. 根据 Thread.State
枚举,分为六种状态
NEW
线程刚被创建,但是还没有调用 start() 方法
RUNNABLE
当调用了 start() 方法之后,注意,Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的【可运行状态】
、【运行状态】
和【阻塞状态】
(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为是可运行)
BLOCKED
,WAITING
, TIMED_WAITING
都是 Java API 层面对【阻塞状态】
的细分
TERMINATED
当线程代码运行结束
NULL -> 创建状态:⼀个新进程被创建时的第⼀个状态;
创建状态 -> 就绪状态:当进程被创建完成并初始化后,⼀切就绪准备运⾏时,变为就绪状态,这个过程是很快的;
就绪态 -> 运⾏状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运⾏该进程;
运⾏状态 -> 结束状态:当进程已经运⾏完成或出错时,会被操作系统作结束状态处理;
运⾏状态 -> 就绪状态:处于运⾏状态的进程在运⾏过程中,由于分配给它的运⾏时间⽚⽤完,操作系统会把该进程变为就绪态,接着从就绪态选中另外⼀个进程运⾏;
运⾏状态 -> 阻塞状态:当进程请求某个事件且必须等待时,例如请求 I/O 事件;
阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;
阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
就绪挂起状态:进程在外存(硬盘),但只要进⼊内存,即刻⽴刻运⾏;