奇思妙想录 我扑在书上,就像饥饿的人扑在面包上。——高尔基
歌曲封面 未知作品

萌ICP备20248808号

津ICP备2023004371号-2

网站已运行 2 年 5 天 21 小时 38 分

Powered by Typecho & Sunny

0 online

Title

浅谈线程状态及状态转换条件

IhaveBB

·

Article
⚠️ 本文最后更新于2023年11月15日,已经过了247天没有更新,若内容或图片失效,请留言反馈
AI摘要:线程状态及其转换条件是多线程编程中的关键概念。线程从新建(NEW)状态开始,调用.start()后变为运行(RUNNABLE)状态。线程可能因等待锁、I/O操作或定时任务而进入阻塞(BLOCKED)、等待(WAITING)或计时等待(TIME_WAITING)状态。任务完成或异常发生后,线程进入终止(TERMINATED)状态。状态转换涉及锁竞争、条件等待、时间等待和线程通知等操作。了解这些状态和转换有助于优化多线程程序的性能和稳定性。

Powered by AISummary.

浅谈线程状态及状态转换条件

1. NEW(新建状态)

这是线程刚被创建但尚未启动的状态。在此状态下,虽然线程对象已经存在,但在调用.start()方法之前,线程不会执行实际任务。当调用.start()方法后,线程会进入到RUNNABLE状态。

2. TERMINATED(终止状态)

在线程的任务执行完成、抛出异常或者调用.stop()方法后,线程进入终止状态。在这种状态下,虽然线程对象仍然存在,但是内核中的线程已经结束,不再执行任务。

3. RUNNABLE(运行状态)

线程在 CPU 上执行,或者在队列中等待 CPU 时间时,处于 RUNNABLE状态。这是线程执行任务的活跃状态。

4. TIME_WAITING(计时等待状态)

有时候,线程需要在一段时间内暂时阻塞自己,例如通过调用Thread.sleep()方法。进入TIME_WAITING状态后,线程会等待指定的时间后恢复到RUNNABLE状态,或者当等待时间结束后,自动切换到RUNNABLE状态。这种状态对于需要暂停一段时间或进行定时任务的情况很有用。

5. WAITING(等待状态)

当线程在等待某些条件满足时,会进入WAITING状态。通常通过调用Object.wait()方法实现。在这种状态下,线程会释放其持有的锁,并暂停执行,直到其他线程通知它可以继续执行。

6. BLOCKED(阻塞状态)

线程在某些情况下可能被阻塞,例如等待I/O操作完成或等待获取某个对象的锁。当线程进入BLOCKED状态时,它会暂时停止执行,直到满足解除阻塞的条件为止。

状态切换条件总结

  1. NEW -> RUNNABLE:调用线程的.start()方法。
  2. RUNNABLE -> BLOCKED:竞争锁失败,被其他线程占用锁资源。
  3. RUNNABLE -> WAITING:调用了Object.wait()等方法,主动释放锁,等待其他线程通知。
  4. RUNNABLE -> TIME_WAITING:调用Thread.sleep()等方法,暂时阻塞自己一段时间。
  5. RUNNABLE -> TERMINATED:线程的任务执行完成。
  6. BLOCKED -> RUNNABLE:成功获取到锁资源。
  7. WAITING -> RUNNABLE:被其他线程通知,等待结束。
  8. TIME_WAITING -> RUNNABLE:等待时间结束。
  9. WAITINGTIME_WAITING -> TERMINATED:调用Thread.stop()方法,或线程被中断。
现在已有 0 条评论,0 人点赞
Comment
发表
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主