线程的状态转换涵盖了新建、就绪、运行、阻塞、等待、计时等待和终止等状态。以下是详细介绍:
- 新建状态(New)。线程刚被创建但尚未启动的状态,当调用线程的start()方法时,线程状态从新建变为就绪。
- 就绪状态(Runnable)。线程准备运行但尚未获得CPU使用权的状态,当线程获得CPU使用权时,状态变为运行。
- 运行状态(Running)。线程正在执行其run()方法中的代码,如果线程调用yield()方法或被操作系统调度,可能转为就绪状态。
- 阻塞状态(Blocked)。线程因等待获取锁(如synchronized关键字或ReentrantLock)而暂时无法执行,一旦获取锁,线程状态变为就绪。
- 等待状态(Waiting)。线程调用没有设置超时参数的Object.wait()、Thread.join()或LockSupport.park()方法,处于等待其他线程的通知或动作,被通知后状态变为就绪。1256
- 计时等待状态(Timed Waiting)。线程调用设置了超时参数的wait(n)、join(n)或sleep(n)方法,处于等待特定时间的状态,超时后状态变为就绪。
- 终止状态(Terminated)。线程执行完毕或因异常而结束,进入终止状态,不能再转换为其他状态。