📚 分类
多线程
🕵🏽‍♀️ 问题描述
线程包括哪些状态,状态之间是如何变化的?
👨‍🏫 问题讲解
❒ 线程通常包括以下几种状态:

✔ 新建状态(New):线程被创建但尚未开始运行。这时,线程对象已经被实例化,但它还没有调用 start() 方法。
✔ 就绪状态(Runnable):线程已经调用 start() 方法,处于就绪状态,等待操作系统的调度。此时,线程可能正在运行,也可能处于等待运行的队列中。
✔ 运行状态(Running):当线程获得 CPU 时间片并被操作系统调度时,它处于运行状态。在这个状态下,线程正在执行其任务。
✔ 阻塞状态(Blocked):线程在等待获得一个锁(例如,等待其他线程释放的同步资源)。当它在等待锁时,线程会进入阻塞状态。
✔ 等待状态(Waiting):线程在等待另一个线程的特定操作(例如,使用 Object.wait() 或 Thread.join() 方法)。此时,线程不会被调度。
✔ 超时等待状态(Timed Waiting):线程在等待某个操作的完成,但会在指定的时间后自动返回。例如,使用 Thread.sleep(millis) 或 Object.wait(millis)。
✔ 终止状态(Terminated):线程的执行完成或因异常终止。在这个状态下,线程已经结束,不会再执行任何代码。

❒ 状态变化的过程:

✔ 新建状态 → 就绪状态:通过调用 start() 方法。
✔ 就绪状态 → 运行状态:操作系统调度线程。
✔ 运行状态 → 阻塞状态:当线程尝试获取一个锁,但该锁被其他线程持有。
✔ 运行状态 → 等待状态:线程调用 Object.wait() 或 Thread.join(),或执行某些阻塞操作。
✔ 运行状态 → 超时等待状态:线程调用 Thread.sleep(millis) 或 Object.wait(millis)。
✔ 阻塞状态 → 就绪状态:当持有锁的线程释放锁,或者等待的条件满足。
✔ 等待状态 → 就绪状态:当被等待的线程完成了其操作,或超时返回。
✔ 超时等待状态 → 就绪状态:当指定的时间过后,线程返回到就绪状态。
✔ 运行状态 → 终止状态:当线程的 run() 方法执行完成或因异常结束。

这些状态和状态之间的转换是多线程编程中非常重要的概念,理解它们对于编写高效和安全的多线程代码至关重要。
🏳️‍🌈 问题总结
❒ 线程包括哪些状态

✔ 新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、时间等待(TIMED_WALTING)、终止(TERMINATED)

❒ 线程状态之间是如何变化的

✔ 创建线程对象是新建状态
✔ 调用了start()方法转变为可执行状态
✔ 线程获取到了CPU的执行权,执行结束是终止状态
✔ 在可执行状态的过程中,如果没有获取CPU的执行权,可能会切换其他状态
📖 问题信息
📈 浏览次数:14 | 📅 更新时间:2025-12-01 22:02:17
📦 创建信息
🏷️ ID:99 | 📅 创建时间:2024-12-12 09:23:41