`
JAVA海洋
  • 浏览: 631502 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

破除java神话之五:等待的线程是按照优先级顺序被唤醒的

阅读更多
在编写多线程代码的时候经常发生多个线程等待一个事件的情况。这种情况多发生于多个线程在同步方法或者同步块内调用wait方法等待同一个被锁住的对象。当另一个锁住该对象的线程从同步方法或者同步块中调用notify或者notifyAll方法时这些等待线程被唤醒。notify调用仅仅唤醒一个线程,因此如果有多个线程正处于等待状态,那么不会有对锁的竞争。另一方面,notifyAll调用唤醒所有的等待线程而造成竞争,然而只有一个线程能够得到锁,其它的都会被阻塞。
当多个线程处于等待状态时的问题是当调用notify或者notifyAll方法后哪一个线程将运行?很多程序员不正确的假定存在一种预定义的顺序表明线程如何被唤醒。一些认为是高优先级的线程首先被唤醒,另一些可能认为是等待了最长时间的线程首先被唤醒。不幸的是上面的假设都是不对的。在这些情况下,哪个线程被唤醒是不确定的,也许是最高优先级的线程,也许是等待最长的线程,但是没有保证。
线程的优先级不能决定它是否被唤醒(在使用notify方法的情况下)或者在多线程环境下的唤醒顺序(在使用notifyAll方法的情况下)。因此,因此你永远不应该假设线程的唤醒顺序。另外,你也永远不应该对抢占过程中的线程调度做任何假设。线程调度是实现相关的(implementation-dependent),不同的平台的调度机制是不同的。如果你想你的程序具有可移植性就不应该做这样的不明智的假设。
另外,notifyAll和notify方法没有提供唤醒等待进程的确定顺序,具体的顺序是依赖JVM的,并且notifyAll所能保证的事情不超过唤醒所有的等待线程。这个状况使得当你想以某种特定的顺序唤醒多个线程时会出现问题。
有两种办法达到控制线程的唤醒顺序:

1、使用精确唤醒模式(
Specificnotificationpattern)
2、使用实现了实时规范的JVM(RTSJ,Real-TimeSpecificationforJava)(译者注:这其实不应该算一种好的方法,这加大了对特定JVM的依赖,打破了可移植性)

精确唤醒模式由TomCargill开发,详细说明了如何控制调用notify和notifyAll时的线程的唤醒顺序。这个实现是通过对需要被一起唤醒的每个线程或者每一套线程设置一个单独的锁达到的。通过对特定的锁进行释放而达到可定义的通知顺序。
如果实现合适,那么这种模式的执行代价是最小的。然而不可避免的要增加编码的复杂性,但是这个复杂性可以通过你得到的控制性抵消掉,如果你需要这样的控制,你可以考虑实现这个模式。

RTSJ改变了某些java语义的标准行为。其中之一就是确保等待线程按照优先级排序。因此当多个线程处于等待状态而调用了notify或者notifyAll,那么具有最高优先级的那个将首先执行,其它的继续等待。
通常,这不是推荐的做法,除非是进行实时编程。已经有几种不同的折衷方案使得java可以进行实时编程。创建RTSJ的最重要的一个原则就是及时性比执行速度更重要!
分享到:
评论

相关推荐

    结合JAVA虚拟机的JAVA课程教学探索.pdf

    JAVA技术的体 系结构包括四个方面的技术:JAVA程序设计语言、JAVA class文件、JAVA应用编程接口(API)和JAVA虚拟机(JVM)。这四部分技术贯穿于JAVA编程与调试运行的整个过程中。 JAVA程序设计语言不仅仅适用于...

    混凝土路面切割破除方案.pdf

    根据提供的文件信息,虽然内容具体细节不是很清晰,但仍可以提炼出一些与“混凝土路面切割破除方案”相关的知识点。在处理工程文件时,方案往往包含了一些工程实施的具体参数、设备要求、安全措施、成本预算等关键...

    洞门破除施工组织方案.doc

    - 破除顺序:根据施工进度和隧道接驳需求,制定合理的洞门拆除顺序。 - 时间节点:设定明确的起止时间,确保不影响整体工程进度。 5. **设备及劳动力组织**: - 设备配置:列出所需机械设备,如钻机、破碎锤、...

    破除迷思:SOC 中的 AI

    ### 破除迷思:SOC中的AI 在当今高度数字化的世界中,网络安全已经成为企业和组织不可忽视的关键领域。随着威胁的不断演变和技术的进步,安全运营中心(SOC)面临着前所未有的挑战。本文旨在深入探讨SOC中引入人工...

    宣大围护桩破除工程施工组织设计方案.doc

    - **施工顺序**:首先由测量班组确定桩顶设计高程,然后按照预定顺序进行破除。 5. **质量控制**: - **成品保护**:在施工过程中需注重对周围环境和已完成结构的保护,防止破损。 6. **工期控制**:未详述,但...

    教师改革创新奋发有为大讨论发言稿【小学教师改革创新奋发有为】.docx

    发言稿中提到了五个关键的“破除”点,分别是“破除僵化保守”、“破除因循守旧”、“破除封闭狭隘”、“破除资源依赖”和“破除随遇而安”,这些都是当前教育改革亟待解决的问题。 1. **破除僵化保守**:面对教育...

    Excel破除密码.docx

    Excel破除密码

    海康威视刷机软件破除限制版

    HIKTOOL通过友好的用户界面和自动化流程,降低了刷机的难度,使得用户只需按照提示操作即可完成整个过程。 5. **安全保护**:在刷机过程中,设备的数据和硬件可能会面临风险。HIKTOOL在设计时考虑了安全性,尽可能...

    破除开机密码

    ### 破除Windows系统开机密码的多种方法 在日常使用电脑的过程中,有时可能会遇到忘记Windows系统开机密码的情况。这不仅影响正常使用,还可能导致数据无法访问。本文将详细介绍几种有效的破除Windows系统开机密码...

    pdf文件密码破除

    对于加密的pdf文件,该工具可以破除密码,还给你一个可以编辑查看的pdf文件。

    桩头破除安全技术交底.docx

    【桩头破除安全技术交底】 桩头破除是一项重要的建筑施工环节,涉及多种安全措施和技术要点。在这一过程中,安全是首要考虑的因素。以下是根据提供的内容详细阐述的几个关键知识点: 1. **个人防护装备**:施工...

    地铁车站出入口地连墙破除工程施工组织设计方案.doc

    - **凿除作业顺序**:详细规划了破除混凝土的步骤和顺序,以保证作业安全和效率。 5. **质量保证措施**: - **制度保证**:建立完善的质量管理体系,如质量检查制度、质量责任制度等,确保工程品质。 - **脚手架...

    公交场站明开隧道路面破除和恢复方案.doc

    破除时需按照层次逐层进行,确保不影响地下设施和下一层的处理。 - 路面构造撤除量:根据工程需求,确定需要破除的路面面积和深度,这可能会影响到交通流量、噪音控制以及废弃物处理。 - 破除方案:通常包括使用...

    五年级语文下册 第九单元 破除迷信 4 试胆量教案 北师大版-北师大版小学五年级下册语文教案.doc

    这篇五年级语文下册第九单元的《破除迷信》4《试胆量》教案,主要围绕着培养学生勇敢精神和理解课文深层含义展开。这是一篇旨在教育孩子们如何面对恐惧,增强自信心,通过实践来破除迷信的故事。下面将详细阐述相关...

    混凝土破除施工技术交底记录大全.doc

    【混凝土破除施工技术交底记录】是针对特定工程项目中混凝土结构拆除的详细指导文件,主要涉及巫家坝机场原飞机跑道的破除工作。以下是该文档中的关键知识点: 1. **工程概况**:这份技术交底适用于里程桩号K1+600...

    破除支护梁施工组织方案.doc

    - 施工顺序:先用吊机吊入挖机进行支撑梁破碎,然后搭设井字式支撑架,进行安全检查,再配置空压机和破碎设备,逐步进行人工配合清理,最后拆除钢立柱并清理现场,等待甲方验收。 5. **文明施工保证措施**: - ...

    破除桩头施工组织设计.doc

    【破除桩头施工组织设计】是建筑工程领域中一项重要的技术方案,主要针对桩基础施工后,桩头顶部多余混凝土的剔除工作。这个过程对于确保工程质量,特别是基础的稳定性和承载力至关重要。以下是根据提供的文件内容...

    汽车行业周报:汽车行业:发改委鼓励破除汽车消费限制.pdf

    汽车行业周报:汽车行业:发改委鼓励破除汽车消费限制.pdf

    5G消费者潜力:打破神话周围的神话消费者的5G价值.rar

    《5G消费者潜力:打破神话周围的神话消费者的5G价值》这份行业报告,深入探讨了5G技术对消费者市场的影响和潜力,旨在揭示5G技术在实际应用中的真实价值,破除围绕这一新兴科技的一些误解。5G,即第五代移动通信技术...

Global site tag (gtag.js) - Google Analytics