Java线程有哪几种状态,相互有什么关系?

Java面试 潘老师 8个月前 (09-04) 165 ℃ (0) 扫码查看

Java面试题:Java线程有哪几种状态,相互有什么关系?

得分点:

NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED

标准回答:

在Java中,线程在其运行生命周期中的任何时刻都会处于以下6种状态之一:

  1. NEW(新建状态):线程被创建,但尚未调用其start()方法。
  2. RUNNABLE(可运行状态):线程正在JVM中执行,但可能在等待操作系统的调度。
  3. BLOCKED(阻塞状态):线程正在等待获取监视器锁,通常发生在同步块或方法中。
  4. WAITING(等待状态):线程正在等待其他线程的通知或中断,通常通过wait()方法或join()方法引起。
  5. TIMED_WAITING(超时等待状态):与WAITING状态类似,但具有超时限制,会在超时时间到达时自动返回。
  6. TERMINATED(终止状态):线程已经执行完毕,生命周期结束。

线程在创建后默认处于NEW状态,调用start()方法后进入RUNNABLE状态。虽然处于RUNNABLE状态表示线程可以运行,但并不一定正在运行,因为它需要等待操作系统的调度。进入等待状态的线程通常需要其他线程的通知才能返回到RUNNABLE状态。超时等待状态是在等待状态的基础上增加了超时时间的限制,一旦超过时间限制,线程会自动返回到RUNNABLE状态。另外,线程在执行同步方法时,如果未获取到锁,会进入BLOCKED状态。线程执行完run()方法后进入TERMINATED状态。

值得注意的是,Java将操作系统中的就绪和运行两个状态合并为可运行状态(RUNNABLE)。线程在等待synchronized的监视器锁时进入BLOCKED状态,而等待Lock锁时进入WAITING状态。这是因为Lock接口实现类在阻塞时使用了LockSupport类的相关方法。

这些不同状态的管理和切换是多线程编程中重要的概念,了解它们有助于开发人员更好地掌握线程的生命周期和行为。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8620.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】