Halo
发布于 2022-05-12 / 95 阅读 / 0 评论 / 0 点赞

通用线程状态

通用线程状态

从操作系统层面上,任何线程一般都具有五种状态,即创建、就绪、运行、阻塞、终止。

新建状态(NEW)

在程序中用构造方法创建一个新线程时,如 new Thread(),该线程就是创建状态,此时它已经有了相应的内存空间和其它资源,但是还没有开始执行。

就绪状态(READ)

新建线程对象后,调用该线程的 start() 方法就可以启动线程。当线程启动时,线程就进入就绪状态(runnable)
由于还没有分配CPU,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件。当系统挑选一个等待执行的Thread对象后,它就会从等待状态进入执行状态。系统挑选的动作称之为“CPU调度”。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。

运行状态(RUNNING)

当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的 run() 方法。

阻塞状态(BLOCKED)

一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。
在可执行状态下,如果调用 sleep()、suspend()、wait() 等方法,线程都将进入阻塞状态。阻塞时,线程不能进入排队队列,只能当引起阻塞的原因被消除后,线程转入就绪状态,重新到就绪队列中排队等待,这时被CPU调度选中后会从原来停止的位置开始继续执行。

记住:阻塞被消除后是回到就绪状态,不是运行状态。

死亡状态(TERMINATED)

线程调用 stop(), destory() 或run()执行结束后,线程即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。


评论