美文网首页
JAVA的线程状态

JAVA的线程状态

作者: liuliuzo | 来源:发表于2021-02-28 21:55 被阅读0次

这里谈论的是Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态:

image.png

它与传统的线程状态的对应可以如下来看:

image.png

RUNNABLE 状态对应了传统的 ready, running 以及部分的 waiting 状态。而 BLOCKED 状态是只跟 synchronize 机制有关的一个状态。

概括的解释下线程的几种可用状态。

新建( new ):新创建了一个线程对象;

可运行( runnable ): 线程对象创建后,其他线程(比如 main 线程)调用了该对象的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取CPU的使用权;

运行( running ): 可运行状态( runnable )的线程获得了CPU时间片( timeslice ) ,执行程序代码;

阻塞( block ):阻塞状态是指线程因为某种原因放弃了CPU 使用权,也即让出了 CPU timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。

阻塞的情况分三种:

  1. 等待阻塞:运行( running)的线程执行o. wait ()方法, JVM会把该线程放入等待队列(waitting queue )中。
  2. 同步阻塞:运行( running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM 会把该线程放入锁池( lock pool )中。
  3. 其他阻塞: 运行( running )的线程执行Thread.sleep (long ms)或t.join ()方法,或者发出了 I/O 请求时, JVM 会把该线程置为阻塞状态。当 sleep ()状态超时、 join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行( runnable )状态。

死亡( dead ): 线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

image.png

在实际工作中,我们需要关注的是block的三种情况的场景

文章转载自:
Java常考面试题
为什么Java线程没有Running状态?

相关文章

  • Java 线程的七种状态

    本篇感性地介绍一下 Java 线程的七种状态以及状态之间的转换 Java 线程状态转换图 Java 线程状态 在 ...

  • 线程状态

    java线程与操作系统线程状态略有不同。 1. 操作系统底层线程状态: 课本经典五状态: 2. JAVA线程状态:...

  • Java 线程有哪些状态?

    Java 线程有哪些状态 1.Java线程状态 1.1 线程主要状态 ①初始(NEW):新创建了一个线程对象,但还...

  • 说一下Java线程状态及切换

    一、什么是Java线程状态 在Java程序中,用于描述Java线程的六种状态: 新建(NEW):当前线程,刚刚新建...

  • Java线程简介

    本文将介绍Java线程的状态、线程的中断、线程间通信和线程的实现。 线程的状态 Java语言定义了6种不同的线程状...

  • java线程状态

    java的线程状态包括以下几种: NEW 线程创建的初始状态。 RUNABLE 线程正在执行。 注意这里是java...

  • JAVA 笔记[12.1][多线程之线程状态]

    JAVA线程状态

  • 总结多线程与设计模式+synchronized+性能+高吞吐+死

    Java线程 Java语言的线程 何谓线程 线程启动 线程的暂时停止 线程的共享互斥 线程的协调 线程的状态转移 ...

  • 理解java线程

    java线程的生命周期 Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:...

  • Java知识梳理六

    一、Java多线程一 1.谈谈线程的生命周期和状态转移 关于线程生命周期的不同状态,在Java 5以后,线程...

网友评论

      本文标题:JAVA的线程状态

      本文链接:https://www.haomeiwen.com/subject/alvnfltx.html