今天在看juc,发现java的源码线程状态和操作系统的不同,java的Thread.State源码中, 是有六种状态的,下面来说说操作系统和java的线程的不同。
操作系统中线程的状态有:
初始状态(NEW)
可运行状态(READY)
运行状态(RUNNING)
等待状态(WAITING)
终止状态 (TERMINATED)
java的线程状态有:这里是从java的Thread.State源码里面翻的
public enum State {
//新生
NEW,
//运行
RUNNABLE,
//阻塞
BLOCKED,
//无限期等待
WAITING,
//限时等待
TIMED_WAITING,
//结束
TERMINATED;
}
区别:
当线程调用阻塞式 API时,进程(线程)进入等待状态,这里指的是操作系统层面的。从 JVM层面来说,Java线程仍然处于 RUNNABLE 状态。JVM 并不关心操作系统线程的实际状态,从 JVM 看来,等待CPU使用权(操作系统状态为可运行态)与等待 I/O(操作系统处于等待状态)没有区别,都是在等待某种资源,所以都归入RUNNABLE 状态