Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《 Java 并
发编程艺术》
线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。 Java 线程状态
变迁如下图所示(图源《 Java 并发编程艺术》 4.1.4 节):
操作系统隐藏 Java 虚拟机( JVM )中的 RUNNABLE 和 RUNNING 状态,它只能看到 RUNNABLE 状态
(图源: HowToDoInJava : Java Thread Life Cycle and Thread States ),所以 Java 系统一般将这两个
状态统称为 RUNNABLE (运行中) 状态 。
操作系统隐藏 Java 虚拟机( JVM )中的 RUNNABLE 和 RUNNING 状态,它只能看到 RUNNABLE
状态(图源: HowToDoInJava :),所以 Java 系统一般将这两个状态统称为 RUNNABLE (运行
中) 状态 。
当线程执行 wait() 方法之后,线程进入 WAITING (等待) 状态。进入等待状态的线程需要依靠其他
线程的通知才能够返回到运行状态,而 TIME_WAITING( 超时等待 ) 状态相当于在等待状态的基础上增加
了超时限制,比如通过 sleep ( long millis ) 方法或 wait ( long millis ) 方法可以将 Java 线程置
于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步
方法时,在没有获取到锁的情况下,线程将会进入到 BLOCKED (阻塞) 状态。线程在执行 Runnable
的 run() 方法之后将会进入到 TERMINATED (终止) 状态。