在Java中,线程有六种基本状态,这些状态反映了线程在其生命周期中的不同阶段。线程的状态转换是由操作系统和JVM(Java虚拟机)调度机制共同控制的。以下是线程的六种状态及其转换:
-
NEW(新建)
- 线程对象被创建但尚未启动,调用
start()
方法前的状态。
- 线程对象被创建但尚未启动,调用
-
RUNNABLE(可运行)
- 线程已经启动,正在执行,或者准备执行。线程处于此状态时,它可能正在等待CPU时间片,或者正在使用CPU资源执行任务。
- 从NEW状态转换到RUNNABLE状态是通过调用
Thread.start()
方法实现的。
-
BLOCKED(阻塞) 或者称为 WAITING(等待) 和 TIMED_WAITING(计时等待)
- WAITING 和 TIMED_WAITING 是线程等待某个条件发生的状态,例如调用了
Object.wait()
、Thread.sleep(long millis)
或者join()
等方法。 - BLOCKED 状态通常指线程在等待锁(monitor lock)以进入同步块或方法。
- WAITING 和 TIMED_WAITING 是线程等待某个条件发生的状态,例如调用了
-
TERMINATED(终止)
- 线程已经执行完毕或因异常而停止执行。