7.4 线程五大状态
分类:
文章
•
2024-03-18 08:25:34

新生状态
- 用new关键字建立一个线程对象后(Thread t = new Thread()),该线程对象就处于新生状态。
- 处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态。该内存空间与主内存进行数据交流。
就绪状态
- 处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU。
- 当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。
- 进入就绪队列有四种原因:start()方法、阻塞事件接触重新进入就绪状态、yield()方法让出CPU调度、jvm将CPU从本地线程切换到其他线程。
运行状态
- 在就绪状态被CPU调度到了,则进入运行状态。
- 在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞或完成任务而死亡。
- 如果在给定的时间片内没有执行结束,就会被系统给换下来回到等待执行状态。
阻塞状态
- 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进 入阻塞状态。
- 在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。
- 四种原因进入阻塞状态:sleep()方法;wait()方法;join()方法;read/write等需要等待的系统操作。
死亡状态
- 死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有三个。一个是正常运行的线程完成了它的全部工作;另一个是线程被强制性地终止,如通过执行stop方法来终止一个线程[不推荐使用],三是线程抛出未捕获的异常