线程的5种状态:
这是从操作系统层面来描述的
初始状态:仅在语言层面创建了线程对象,还未与操作系统线程关联
可运行状态:(就绪状态)指该线程已经被创建(与操作系统线程关联),可由CPU调度执行
运行状态:指获取了CPU时间片运行中的状态
当CPU时间片用完,会从运行状态转换至可运行状态,会导致线程的上下文切换
阻塞状态:
如果调用了阻塞API,比如BIO读写文件,这时该线程实际上不会用到CPU,会导致线程上下文切换,进入阻塞状态
等BIO操作完毕,会由操作系统唤醒阻塞的线程,转换至【可运行状态】
与【可运行状态】的区别是,对于阻塞状态的线程来说,只要它们一直不唤醒,调度器就不会考虑它们
终止状态:表示线程已经执行完毕,生命周期已经结束,不会再转换为其他状态
线程的6种状态
根据Thread State枚举类的描述,进行分类
NEW:线程刚被创建,但是还没调用start()方法
RUNNABLE:当调用了start()方法之后,java API层面的RUNNABLE状态涵盖了操作系统层面的[可运行状态],
[运行状态]、[阻塞状态](由于BIO导致的线程阻塞,在Java里无法区分,认为是可运行的)
BLOCKED , WAITING , TIMED_WAITING:都是 Java API 层面对【阻塞状态】的细分,后面会在状态转换一节
详述
TERMINATED:当线程代码运行结束