Java线程的生命周期包含以下状态:
- 新建(New):当一个线程被创建但还没有被启动时,它的状态是新建。
- 就绪(Runnable):当线程已经被启动并且没有任何阻止它立即运行的条件时,它的状态是就绪。在 JVM 中,线程调度系统负责在就绪队列中调度线程以决定哪个线程应该获得 CPU。
- 运行(Running):当线程获得 CPU 并开始执行时,它的状态是运行。
- 阻塞(Blocked):当线程等待某个条件(例如:等待获取锁)时,它的状态是阻塞。阻塞状态是暂时的,一旦等待的条件得到满足(例如:获取到锁),线程就会回到就绪状态。
- 等待(Waiting):当线程进入无限等待的状态时(例如:调用
wait()
方法),它的状态是等待。只有在其他线程调用了该线程的notify()
或notifyAll()
方法后,该线程才能从等待状态回到就绪状态。- 超时等待(Timed Waiting):当线程等待某个条件直到某个时间点时,它的状态是超时等待。例如,当线程调用
Thread.sleep(int)
或Object.wait(long)
方法时,该线程将进入超时等待状态。一旦等待的时间过去,线程将回到就绪状态。- 终止(Terminated):当线程完成执行或因异常而终止时,它的状态是终止。
这就是 Java 线程的生命周期。请注意,状态之间的转换可能会受到多种因素的影响,包括但不限于线程调度、资源可用性、线程同步等。