首页 > 编程语言 >不同角度理解线程的状态(操作系统 & Java API)

不同角度理解线程的状态(操作系统 & Java API)

时间:2022-10-28 09:11:05浏览次数:42  
标签:状态 Java 操作系统 API 线程 阻塞状态

3.12 五种状态 ( 操作系统 层面)

这是从 操作系统 层面来描述的

image.png

  • 【初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联

  • 【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行

  • 【运行状态】指获取了 CPU 时间片运行中的状态

    • 当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换
  • 【阻塞状态】

    • 如果调用了阻塞 API,如 BIO 读写文件,这时该线程实际不会用到 CPU,会导致线程上下文切换,进入【阻塞状态】
    • 等 BIO 操作完毕,会由操作系统唤醒阻塞的线程,转换至【可运行状态】
    • 与【可运行状态】的区别是,对【阻塞状态】的线程来说只要它们一直不唤醒,调度器就一直不会考虑调度它们
  • 【终止状态】表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态

3.13 六种状态(Thread.State)

这是从 Java API 层面来描述的

根据 Thread.State 枚举,分为六种状态

image.png

  • NEW线程刚被创建,但是还没有调用 start() 方法
  • RUNNABLE 当调用了 start() 方法之后,注意,Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的【可运行状态】、【运行状态】和【阻塞状态】(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为是可运行)
  • BLOCKED , WAITING , TIMED_WAITING 都是 Java API 层面对【阻塞状态】的细分,后面会在状态转换一节详述
  • TERMINATED 当线程代码运行结束

标签:状态,Java,操作系统,API,线程,阻塞状态
From: https://www.cnblogs.com/LoveBB/p/16834700.html

相关文章

  • 多个tomcat一台服务器上运行时(JAVA)环境配置
    一,修改配置文件server.xml的端口C:\apache-tomcat-5.5.23-1\conf\server.xml用记事本什么的打开修改3个地方 第一:<Serverport="9005"shutdown="SHUTDOWN">----原来......
  • Java多线程(5):CAS
     您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~  在JDK1.5之前,Java的多线程都是靠synchronized来保证同步的,这会引起很多性能问题,例如死锁。但随着Java的不断完善,J......
  • 基于springboot+vue物资管理系统java物资统计系统(源码调试+讲解+文档)
    ......
  • JavaScript 手写深拷贝
    深拷贝深拷贝就是要拷贝的对象内的所有引用类型的属性进行完整的拷贝;也就是说拷贝出来的对象和原对象之间没有任何数据是共享的,所有的东西都是自己独占的一份;三步实现深......
  • java中类的关系的总结
    类和类之间存在多种关系,而这种关系在我们的代码中司空见惯,有时多种类关系很难区分(由于水平有限,没有画出类的关系图,关系图可以参考参考链接)继承关系继承是指一个子类......
  • JAVA-二维数组元素打乱
    packagecom.itheima;importjava.util.Random;publicclassshuzu07{publicstaticvoidmain(String[]args){int[][]arr={{1,2,3},{4,5,6},{7,......
  • JAVA-二维数组遍历
    改进代码改进代码最终遍历代码packagecom.itheima;publicclassshuzu06{publicstaticvoidmain(String[]args){int[][]arr={{1,2,3},{4,5,......
  • Java序列化和反序列化
    java序列化:java对象转换为字节序列过程,java反序列化把字节序列恢复为java对象的过程Serializable实现序列化Java中,只要一个类实现了java.io.Serializable接口,可以序列化......
  • JAVA常见基础知识点
    JAVA常见基础知识点一、注释Java中有三种注释,分别是单行注释、多行注释、文档注释。单行注释:注释某一行代码。使用//多行注释:注释某一段代码。使用/*...*/文档注释......
  • JAVA-二维数组 和元素访问
    二维数组的定义静态初始化动态初始化packagecom.itheima;publicclassshuzu04{publicstaticvoidmain(String[]args){int[][]arr={{7,9,10......