线程生命周期就是从线程创建到线程终止过程中线程的几种状态切换。 线程状态分为五种,分别是新建状态,就绪状态,运行状态,阻塞状态和终止状态。
1. 新建状态(New)
当实例化一个 Thread 对象后,线程处于新建状态。此时线程尚未启动,不会执行任何操作。
2. 就绪状态(Runnable)
当调用线程的 start() 方法后,线程从新建状态切换到就绪状态。就绪状态是线程等待 CPU 调度的临时状态。线程处于就绪状态时,会尝试抢占 CPU 资源,一旦抢占成功,就会切换到运行状态。
3. 运行状态(Running)
线程获得 CPU 资源后进入运行状态,开始执行线程的功能,例如 Thread 的 run() 方法或 Callable 的 call() 方法。
- 在运行状态下,线程可能发生以下状态切换:
- 失去 CPU 使用权:例如时间片用完或其他线程抢占了 CPU,线程会切换回就绪状态。
- 调用 yield() 方法:线程主动让出 CPU,切换回就绪状态。
- 调用 sleep()、wait() 或 join() 方法:线程会切换到阻塞状态。
- 线程执行完成、出现异常或被停止:线程会切换到终止状态。
4. 阻塞状态(Blocked/Waiting/Timed Waiting)
- 阻塞状态的线程暂时停止执行,让出 CPU 资源。阻塞状态分为以下几种情况:
- 调用 sleep() 方法:线程进入阻塞状态,休眠时间结束后自动切换回就绪状态。
- 调用 wait() 方法:线程进入阻塞状态,需要通过 notify() 或 notifyAll() 方法被唤醒后切换回就绪状态。
- 调用 join() 方法:线程进入阻塞状态,等待被调用 join() 的线程执行完成,然后自动切换回就绪状态。
- (已过时)调用 suspend() 方法:线程进入阻塞状态,需要通过 resume() 方法恢复运行。
5. 终止状态(Terminated)
线程执行完成、出现异常或被停止后进入终止状态。处于终止状态的线程无法再恢复运行,生命周期结束。
总之:线程生命周期包括新建、就绪、运行、阻塞和终止五种状态。线程从新建状态通过 start()
方法进入就绪状态,然后等待 CPU 调度进入运行状态。运行状态的线程可能因失去 CPU、调用特定方法或执行完成而切换到其他状态。阻塞状态的线程在满足特定条件后会切换回就绪状态,最终线程进入终止状态完成生命周期。
如果你对这些内容感兴趣,或者想获取更多关于 Java 面试的干货,欢迎关注我!我会持续分享最新的面试技巧、技术解析以及行业动态,助你在面试中脱颖而出,轻松拿下心仪 Offer!