在线程的生命周期中,线程会有5种状态。
-
新建状态
新建状态(New)是通过实例化Thread
创建线程对象,它仅仅是一个空的线程对象。 -
就绪状态
当主线程调用新建线程的start()
函数后,它就进入就绪状态(Runnable)。此时的线程尚未真正开始执行线程体,它必须等待 CPU 的调度。 -
运行状态
CPU 调度就绪状态的线程,线程进入运行状态(Running),处于运行状态的线程独占 CPU,执行完成线程体。 -
阻塞状态
由于某种原因运行状态的线程会进入不可运行状态,即阻塞状态(Blocked)。Java 虚拟机系统不能执行处于阻塞状态的线程,即使 CPU 空闲,也不能执行该线程。如下几个原因会导致线程进入阻塞状态:- 当前线程调用
sleep
函数,进入休眠状态; - 被其他线程调用了
join
函数,等待其他线程结束; - 发出 I/O 请求,等待 I/O 操作完成期间;
- 当前线程调用
wait
函数。
处于阻塞状态可以重新回到就绪状态,如休眠结束、其他线程加入、I/O 操作完成 和 调用
notify
或notifyAll
唤醒wait
线程。 - 当前线程调用
-
死亡状态
线程执行完成线程体后,就会进入死亡状态(Dead),线程进入死亡状态有可能是正常执行完成进入,也可能是由于发生异常而进入的。
线程状态
网友评论