首页常见问题正文

Java培训:线程的状态和转换

更新时间:2023-11-07 来源:黑马程序员 浏览量:

IT培训班

  在Java中,要想实现多线程,就必须在主线程中创建新的线程对象。当线程对象创建完成时,线程的生命周期也就开始了,当run()方法正常执行完毕,或者出现未捕获的异常或者错误的时候,线程的生命周期便结束了。线程的生命周期中包含五种状态,分别是新建状态、就绪状态、运行状态、阻塞状态和死亡状态,线程的不同状态表明了线程当前正在进行的活动。在程序中,通过一些操作可以使线程在不同状态之间进行转换,如图6-6所示。

  图6-6展示了线程各种状态的转换关系,箭头表示可转换的方向,其中,单箭头表示状态只能单向转换,双箭头表示两种状态可以互相转换,下面针对线程的五种状态分别进行详细讲解。

1699348624250_线程的状态及转换.jpg

  图6-6 线程状态转换图

  1.新建状态

  当线程对象创建成功后,线程就处于新建状态,处于新建状态的线程仅仅是在Java虚拟机中分配了内容空间,此时还不能运行。

  2.就绪状态

  当线程对象调用了start()方法后,就进入了就绪状态,处于就绪状态的线程位于可运行池中,具备运行的条件,能否获得CPU的执行权需要等待系统调度。

  3.运行状态

  当就绪状态的线程获得CPU的执行权,并开始执行run()方法时,线程处于运行状态。一个线程启动后,它可能不会一直处于运行状态,当运行状态的线程使用完系统分配的时间后,系统就会剥夺该线程占用的CPU资源,让其他线程获得执行的机会。需要注意的是,只有处于就绪状态的线程才可能转换到运行状态。

  4.阻塞状态

  一个正在执行的线程在某些特殊情况下,如果被认为挂起或需要执行耗时的输入/输出操作时,会让出CPU的执行权进入阻塞状态。进入阻塞状态的线程不能进入排队队列,只有当引起阻塞的原因被消除后,线程才可以转入就绪状态。

  5.死亡状态

  线程调用stop()方法时或run()方法执行结束后,即处于死亡状态。处于死亡状态的线程不具有继续运行的能力,也不能转换到其他状态。

  本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!

  作者:黑马程序员Java培训学院

  首发:https://java.itheima.com

分享到:
在线咨询 我要报名
和我们在线交谈!