jvm中线程分为哪些状态
jdk中的注释如下:
public enum State {
NEW, // 初始化,还没开始执行
RUNNABLE, // 可执行
RUNNING//执行
BLOCKED, // 锁定(阻塞?)
WAITING, // 等待
TIMED_WAITING, // 超时等待
TERMINATED; // 执行完成
}
在jvm中一共有线程一共有六种状态。需要注意的是,这个只是jvm中的线程状态,并不是操作系统中的线程状态。操作系统的线程状态中还有一个就绪状态(ready)
引用
在执行Thread.start()方法后,线程是不是马上运行?
不是。在调用Thread的start方法后,Thread的状态变为RUNNABLE。那么现在这个线程到底有没有运行呢?查看jdk源码可知,start方法中调用的是start0的native方法,由他调用底层真正地在操作系统创建一个线程。
操作系统创建的线程马上就会运行吗?答案是否定的。线程需要被cpu调度,分配了时间片之后才会真正的运行。因此jvm中的RUNNABLE状态其实对应了两个状态,ready和runnable。创建的新线程是ready状态,被cpu调度后成为runnale状态,这时候才是真正的运行状态。
网友评论