### 线程有几种状态?状态之间怎么转换?一般是5个创建就绪运行阻塞死亡源码中还有一种状态是什么?
一般情况下,线程有五种状态:
-
新建(New):当线程对象被创建时,它处于新建状态。
-
就绪(Runnable):当线程对象被创建后,其他线程调用了该线程的 start() 方法之后,该线程就处于就绪状态。就绪状态的线程可能正在等待 CPU 时间片,但是它已经准备好了运行。
-
运行(Running):当 CPU 时间片分配给线程时,线程开始运行。注意,只有处于就绪状态的线程才可能被分配 CPU 时间片,处于阻塞或等待状态的线程是不会被分配 CPU 时间片的。
-
阻塞(Blocked):当线程执行了一些阻塞操作,如等待输入输出、请求锁等时,它就处于阻塞状态。处于阻塞状态的线程将不会占用 CPU 时间片,直到阻塞操作结束。
-
死亡(Dead):当线程完成了它的工作或者出现了异常而终止时,它就处于死亡状态。死亡状态的线程不能再次启动。
除了这五种状态,源码中还有一种状态是“等待(Waiting)”状态。这是一种特殊的阻塞状态,当线程执行了一些等待操作,如等待其他线程的通知、等待定时器等时,它就处于等待状态。不同于阻塞状态的是,在等待状态下,线程需要等待其他线程的通知或者定时器到期等事件才能继续执行。在 Java 中,等待状态还可以分为两种子状态:一种是等待其他线程的通知(wait),另一种是等待定时器到期(sleep)。
原文地址: https://www.cveoy.top/t/topic/bgHT 著作权归作者所有。请勿转载和采集!