Java 多线程(PART VI) 线程状态图解

图解

这是网上出现频率最高的一张图:
我用AI重新画了一遍(adobe illustrator 软件不错,但是我不太会用)。
这里写图片描述

主要有那么5种状态:

新建状态:

此时线程对象已经被创建,但是还是没有调用start()方法,如果调用run()方法线程不会启动。

可执行状态:

注:这是唯一可以进入running状态的状态,也叫就绪状态。
此时已经调用方法start(),JVM会为起创建方法调用栈和程序计数器,此时它随时都可以被CPU调度。

运行状态:

此时线程获得CPU资源,正在运行。如果此时调用yield方法会主动放弃CPU退回到可执行状态。

阻塞状态:

如果CPU由于某种突发原因放弃了CPU的使用权。此时会进入阻塞状态。此时调度器忽略次线程,直到其返回就绪状态。才有可能再次被调用。

等待阻塞

调用线程的wait()方法,让线程等待某工作的完成。

同步阻塞

线程在获取synchronized同步锁失败,因为其他的线程已经获得了这个锁,它会进入同步阻塞状态。

其他阻塞

调用sleep()方法或join()或者等待I/O操作,线程会进入到阻塞状态。如果此时sleep时间到了,或者join等待的线程已经完成操作,或者I/O完成,就好再次进入到就绪状态。

死亡状态

此时线程任务已经完成,或者是不可再运行。处于死亡状态的线程是不可再调度的,不可再得到CPU时间。