Java 线程在运⾏的⽣命周期中的指定时刻只可能处于下⾯ 6 种不同状态的其中⼀个状态(图源《Java 并发编程艺术》4.1.4 节)。

file

线程在⽣命周期中并不是固定处于某⼀个状态⽽是随着代码的执⾏在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术》4.1.4 节):

file

由上图可以看出:
线程创建之后它将处于NEW(新建) 状态,调⽤start()⽅法后开始运⾏,线程这时候处于READY(可运⾏) 状态。可运⾏状态的线程获得了 cpu 时间⽚(timeslice)后就处于RUNNING(运⾏) 状态。

操作系统隐藏 Java 虚拟机(JVM)中的READYRUNNING状态,它只能看到RUNNABLE状态,所以 Java 系统⼀般将这两个状态统称为RUNNABLE(运⾏中)状态 。

file

当线程执⾏wait()⽅法之后,线程进⼊WAITING(等待)状态。进⼊等待状态的线程需要依靠其他线程的通知才能够返回到运⾏状态,⽽TIME_WAITING(超时等待)状态相当于在等待状态的基础上增加了超时限制,⽐如通过sleep(long millis)⽅法或wait(long millis)⽅法可以将 Java 线程置于TIMED WAITING状态。当超时时间到达后 Java 线程将会返回到RUNNABLE状态。当线程调⽤同步⽅法时,在没有获取到锁的情况下,线程将会进⼊到BLOCKED(阻塞)状态。线程在执⾏Runnablerun()⽅法之后将会进⼊到 TERMINATED(终⽌)状态。

最后修改日期: 2021年11月22日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。