大家好,我是锋哥。今天分享关于【概括的解释下线程的几种可用状态?】面试题。希望对大家有帮助;

概括的解释下线程的几种可用状态?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
1. 新建(New)
- 描述:当一个线程对象被创建时,它处于“新建”状态。此时线程还没有开始执行。
- 转变条件:线程对象被创建并初始化后,等待启动。
2. 就绪(Runnable)
- 描述:当线程调用
start()方法后,线程就进入了就绪状态,准备执行。此时,线程并不一定立即开始运行,而是等待操作系统分配 CPU 时间片。 - 转变条件:线程被操作系统调度器选中并分配执行时间,线程进入运行状态。
3. 运行(Running)
- 描述:当线程获得 CPU 时间片并开始执行时,它处于“运行”状态。线程开始执行其
run()方法中的代码。 - 转变条件:线程成功获得 CPU 时间并开始执行代码。
4. 阻塞(Blocked)
- 描述:当线程试图访问一个它没有权限访问的共享资源(如同步代码块中的资源)时,线程进入阻塞状态。常见的阻塞情形包括:
- 线程等待获取锁(如在
synchronized块中)。 - 线程等待 I/O 操作完成。
- 线程等待获取锁(如在
- 转变条件:线程需要等待某些资源的释放,通常是等待某个锁或者条件满足。
5. 等待(Waiting)
- 描述:线程进入等待状态时,通常是等待其他线程执行某些操作或事件的发生。线程会一直等待,直到其他线程调用
notify()或notifyAll()来唤醒它。 - 转变条件:线程显式地调用了
Object.wait()或Thread.join()等方法,处于无条件的等待状态,直到被唤醒。
6. 超时等待(Timed Waiting)
- 描述:线程进入这个状态是因为它调用了一个有时间限制的等待方法(例如:
Thread.sleep()、Object.wait(long timeout)、Thread.join(long millis))。线程在等待指定的时间后会自动恢复。 - 转变条件:等待时间到达,线程被唤醒或超时。
7. 死亡(Terminated)
- 描述:当线程的
run()方法执行完成,或者线程因未处理的异常而终止时,线程进入“死亡”状态。 - 转变条件:线程执行完毕或异常终止。
状态转换概述:
- 从 新建 状态通过调用
start()进入 就绪 状态。 - 从 就绪 状态,线程有可能被调度为 运行 状态。
- 线程可能因 I/O 等操作进入 阻塞 或 等待 状态。
- 线程在睡眠或指定时间的等待后会进入 超时等待 状态。
- 当线程执行完毕或因异常退出时,它进入 死亡 状态。
这些状态帮助开发者理解线程的生命周期,并有效管理多线程编程中的调度和资源访问。
43万+

被折叠的 条评论
为什么被折叠?



