`

线程状态转移模型

    博客分类:
  • java
阅读更多

一,简介

       线程有新建,就绪,运行,阻塞,死亡5种状态。其中线程阻塞指的是暂停一个线程继续向下执行以等待某个条件发生(如某资源就绪等)。

 

二,状态转移模型

     

 

通常引起一个运行线程进入阻塞状态的方法有:sleep(),join(),wait()等

   1)   sleep() 方法:sleep() 允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 调度执行,指定的时间一过,线程重新进入可执行状态(就绪状态)。等待CPU的调度执行(从阻塞点继续向下执行)。

   2)   join()方法:可以将两个交替执行的线程合并为顺序执行。比如在线程B中调用了线程Ajoin()方法,直到线程A执行完毕后,才会继续执行线程B,在调用A.join()时,线程B进入阻塞状态,当线程A执行完毕以后,线程B才会从阻塞状态变为就绪状态,等待CPU的调度执行。join(time)方法:传入等待的时间参数time,在该时间time内,线程B处于阻塞状态,过了指定的时间以后,线程B变为就绪状态(不管线程A是否执行完毕)

  3)   wait()方法:使当前线程暂停执行,进入阻塞状态并释放锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象(调用wait方法的那个对象)等待池中。当调用notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果对象等待池中没有线程,则notify()不起作用。notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。由此可以看出:对象等待池和锁标志等待池中的线程都是处于阻塞状态的只有当锁标志等待池中的阻塞线程得到锁以后,才会变为就绪状态,等待CPU的调度执行。

  4)yield()方法只是让运行线程转为就绪状态,进入就绪线程池中,再次等待CPU的调度执行,并不是让线程进入阻塞状态。这也就是为什么yield()方法只能让相同(或者更高)优先级的线程有执行的机会(CPU线程调度方式:按优先级抢占式调度),而sleep()则可以让比其低优先级的线程有执行的机会。

 

三,总结

  sleep(),join()iO等待,这种状态下线程不会释放获得的锁wait()会释放获得的锁

  • 大小: 18 KB
分享到:
评论

相关推荐

    面向对象系统分析与设计课件及复习资料

    8.4.2 条件线程 8.4.3 同步状态 8.4.4 动态并发 8. 5 活动图的应用 8. 5. 1 用途 8. 5. 2 工作流建模 第9章 包图 9. 1 包的语义和表示 9. 2 包的嵌套 9.3 标准构造型 9. 2 包的联系 9. 2. 1 依赖...

    UML与系统分析设计

    8.4.2 条件线程 8.4.3 同步状态 8.4.4 动态并发 8. 5 活动图的应用 8. 5. 1 用途 8. 5. 2 工作流建模 第9章 包图 9. 1 包的语义和表示 9. 2 包的嵌套 9.3 标准构造型 9. 2 包的联系 9. 2. 1 依赖...

    AI学习知识点.xmind

    状态转移矩阵 特征向量 矩阵的相关乘法 矩阵的QR分解 对称矩阵、正交矩阵、正定矩阵 矩阵的SVD分解 矩阵的求导 矩阵的映射和投影 数据分析 常数e gini系数 导数 梯度 梯度下降 信息熵与组合数 ...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     3.4.4 TCP连接的状态转移过程  3.5 IP数据包格式  3.6 Internet消息控制协议  本章小结 第二篇 初级应用篇  第四章 基本套接字编程实践  4.1 基本套接字函数族  4.1.1 socket编程的基本流程 ...

    Linux高性能服务器编程

    3.2.3 使用tcpdump观察TCP头部信息 3.3 TCP连接的建立和关闭 3.3.1 使用tcpdump观察TCP连接的建立和关闭 3.3.2 半关闭状态 3.3.3 连接超时 3.4 TCP状态转移 3.4.1 TCP状态转移总图 3.4.2 TIME_WAIT状态 3.5...

    akka-money-transfer:使用Akka + Scala + Kafka + Microservices的React性银行帐户(P2P转移)

    使用Akka + Scala + ... 这意味着每个帐户都是一个演员,他知道如何以线程安全的方式更改可变状态。 贡献准则 为每个参与者消息编写单元测试 为每个公开的API端点编写集成测试 Scala 2.13最佳做法 React性原则 异步

    软件工程-理论与实践(许家珆)习题答案

    主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。 5. 有哪些主要的软件开发方法? 答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    Java虚拟机

    第12章 Java内存模型与线程 12.1 概述 12.2 硬件的效率与一致性 12.3 Java内存模型 12.3.1 主内存与工作内存 12.3.2 内存间交互操作 12.3.3 对于volatile型变量的特殊规则 12.3.4 对于long和double型变量的...

    java 面试题 总结

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...

    FreeBSD操作系统设计与实现

    4.3.1 线程状态 4.3.2 底层上下文切换 4.3.3 主动上下文切换 4.3.4 同步 4.3.5 互斥同步 4.3.6 锁管理器的锁 4.3.7 其他同步 4.4 线程调度 4.4.1 4.4BSD的调度程序 4.4.2 线程调度 4.4.3 线程优先级的计算 4.4.4 ...

    UML基础、案例与应用(第三版)].施穆勒.扫描版_2分.pdf

    23.5.2 线程 268 23.5.3 中断 269 23.5.4 操作系统 270 23.6 对GetAGrip系统建模 272 23.6.1 类 272 23.6.2 用例 274 23.6.3 交互 274 23.6.4 整体状态变化 277 23.6.5 整体部署 277 23.7 锻炼肌肉 278 23.8 小结 ...

    【RT-Thread作品秀】远程调试终端-电路方案

    以状态机的方式进行数据解包,状态机转移图如下图所示: 数据打包: 该设计将JSON打包为如下格式: 演示效果演示视频: 比赛感悟通过本次比赛熟悉了rt-thread的操作系统以及rt-thread studio的使用方式,被rt-thread优雅...

    introductionToAlgorithms

    发布/获取区别,状态码介绍,区别go语言go的并发模型协程与线程的区别/利用协程是否真的可以增加并发能力golang的defer问题golang的变量引用问题golang地图刚完成系统外观投票/选择ngxin / redis第章(nginx配

    数学建模方法:蚁群算法

    多线程蚁群算法及其在最短路问题上的应用研究 改进的蚁群算法在2D HP模型中的应用 制造系统通用作业计划与蚁群算法优化 基于混合行为蚁群算法的研究 火力优化分配问题的小生境遗传蚂蚁算法 基于蚁群算法的对等网...

    网站架构技术

    问题: 负载均衡情况下session状态的保持? 解决方案: 基于DNS的负载均衡 反向代理 ngix JK2 数据库的读写分离 问题: 读库与写库的数据同步 解决方案: 不同的数据库都有自己的数据库...

    java面试800题

    事务执行的结果是从一个一致性状态转移到另一个一致性状态。 Isolation(隔离性) 一个事务的执行不能被其它事务干扰,即并发事务间内部数据是隔离的。 Durability(持久性) 事务开始执行后,它对系统中数据的...

    C#微软培训资料

    9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 10.2 类 的 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 ...

Global site tag (gtag.js) - Google Analytics