千家信息网

Java互斥的"等待-通知"机制

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"Java互斥的"等待-通知"机制",在日常操作中,相信很多人在Java互斥的"等待-通知"机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java互
千家信息网最后更新 2025年12月02日Java互斥的"等待-通知"机制

这篇文章主要介绍"Java互斥的"等待-通知"机制",在日常操作中,相信很多人在Java互斥的"等待-通知"机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java互斥的"等待-通知"机制"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

话不多说咱们先看一段代码哈哈哈

这段代码的意思就是我们去行政服务中心办护照,工作人员A来服务我们,我们需要给他我们的身份证才能办理对吧,办好之后付了钱才会生效。

因为A同一时刻只能服务一个人,所以我们给A加了个锁。但是上面代码有一点不符合我们的现实逻辑,

就是这一段代码,就是说如果你排队叫号,叫到你了你去柜台,发现你没带身份证,那正常情况下就是你得会回家拿身份证,工作人员A是不会让你占着位置等你的,而是会叫下一号。如果不叫下一号等你回家拿身份证来效率多低啊?那放在我们代码里面也是一样的!

所以如何提高效率呢?这就引入了"等待-通知"机制了!

我们改造下上面的类A

经过这个改造就符合我们的正常情况了!但你去了柜台发现你没身份证,工作人员告诉你不好意思你回去拿吧(wait)!就是让你去一边等着去,下一位!

翻译到java中就是,你这个线程来执行办理护照,但是你不满足条件所以你就一边等着(解锁了),不要阻塞着大家!这样效率就提高了很多了!然后等一个人办理好之后就是通知一下那些等待的线程,看看你们现在带身份证了没?如果带来再来排队!

咱们再深入的剖析一下这个流程

就是我们被锁的方法就会被统一包起来!所有的进出都被synchroinzed 把控了。

等待对列就是存放那些等待的想进入这个临界区的线程们,条件变量就是对应着我们上面代码的IdCard,调用了wait()就表示不满足我们的条件,所以让当前线程进去条件变量等待对列!

再调用notifyAll()表面现在条件满足了!然后那些条件对待对列中的所有线程出去到等待对列中排队了!

这里说说为什么用notifyAll()而不是notify(),因为notify()是随机唤醒一个条件变量等待对列中的线程去让他们出去继续排队!那就是有可能一些线程永远不会被通知到!那不玩完了么?所以推荐使用notifyAll();

还有一点我们用了

为什么加了个while循环再一次对条件进行判断呢?

因为notifyAll()的时候你的条件是满足的!但是你又出去排队了,那指不定排队轮到你的之后条件又不满足了!所以需要加个while循环!

还有如果你用的是Lock其实也是一样的意思!

所以引入了"等待-通知"机制提高了我们代码执行的效率!

到此,关于"Java互斥的"等待-通知"机制"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

就是 条件 代码 线程 机制 身份 身份证 效率 学习 人员 变量 工作人员 意思 工作 服务 个人 情况 护照 方法 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 经营范围计算机网络技术 厄运峡谷服务器是什么游戏 数据库技术及应用人民邮电出版社 一个网站对应多个服务器 微信红包软件开发团队 dell服务器报cpu0000 5g网络安全指的是什么 数据中心服务器和本地服务器 我的世界基岩版混合服务器 方舟服务器怎么进 网络安全员与程序员的区别 船舶网络安全专家 删除数据库在VS中怎么弄 加强网络安全工作的方案 英网软件开发 平顶山软件开发哪家好 院内设备网络安全制度 7年前的安卓手机怎么连服务器 上海数据库安全箱批量定制 大庆网络安全平台 危害网络安全的行为应向谁举报 方舟生存进化非专用服务器和单人 成都 网络安全的公司排名 多服务器网站吗 率土之滨多久出一个服务器 数据库技术的发展的应用 虚拟专用网络安全吗 删除数据库在VS中怎么弄 7年前的安卓手机怎么连服务器 报备网络安全事件
0