线程在Java中通常有以下几种状态:
新建状态 (NEW)
当线程对象被创建后,但还没有调用 `start()` 方法时,线程处于新建状态。
就绪状态 (Runnable)
线程对象创建后,其他线程调用了该对象的 `start()` 方法,线程便进入就绪状态。
就绪状态的线程位于可运行线程池中,等待操作系统调度执行。
运行状态 (Running)
当线程获取到CPU时间片后,线程进入运行状态,开始执行其任务。
阻塞状态 (Blocked)
线程在运行过程中可能因为等待获取锁、I/O操作等原因而进入阻塞状态。
阻塞状态的线程在条件满足后(如锁释放、I/O操作完成)会重新进入就绪状态。
等待状态 (WAITING)
线程调用 `Object.wait()`、`Thread.join()`(无超时)或 `LockSupport.park()` 方法时,进入等待状态。
等待状态的线程需要等待其他线程做出特定的动作(如通知或中断)才能继续执行。
定时等待状态 (TIMED_WAITING)
线程调用 `Thread.sleep(long)` 或 `Object.wait(long)` 方法时,进入定时等待状态。
定时等待状态的线程在指定的时间后自动返回就绪状态。
终止状态 (TERMINATED)
线程执行完所有任务后,或者因为异常退出 `run()` 方法后,线程进入终止状态。
这些状态反映了线程在其生命周期中的不同阶段,线程的状态转换通常是由Java虚拟机(JVM)根据线程调度策略和操作系统的线程管理机制来控制的。