亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-08-26 15:29:45 來源:億速云 閱讀:138 作者:chen 欄目:大數據

這篇文章主要介紹“Java互斥的"等待-通知"機制”,在日常操作中,相信很多人在Java互斥的"等待-通知"機制問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java互斥的"等待-通知"機制”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

話不多說咱們先看一段代碼哈哈哈

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

這段代碼的意思就是我們去行政服務中心辦護照,工作人員A來服務我們,我們需要給他我們的身份證才能辦理對吧,辦好之后付了錢才會生效。

因為A同一時刻只能服務一個人,所以我們給A加了個鎖。但是上面代碼有一點不符合我們的現實邏輯,

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

就是這一段代碼,就是說如果你排隊叫號,叫到你了你去柜臺,發現你沒帶身份證,那正常情況下就是你得會回家拿身份證,工作人員A是不會讓你占著位置等你的,而是會叫下一號。如果不叫下一號等你回家拿身份證來效率多低啊?那放在我們代碼里面也是一樣的!

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

我們改造下上面的類A

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

經過這個改造就符合我們的正常情況了!但你去了柜臺發現你沒身份證,工作人員告訴你不好意思你回去拿吧(wait)!就是讓你去一邊等著去,下一位!

翻譯到java中就是,你這個線程來執行辦理護照,但是你不滿足條件所以你就一邊等著(解鎖了),不要阻塞著大家!這樣效率就提高了很多了!然后等一個人辦理好之后就是通知一下那些等待的線程,看看你們現在帶身份證了沒?如果帶來再來排隊!

咱們再深入的剖析一下這個流程

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

就是我們被鎖的方法就會被統一包起來!所有的進出都被synchroinzed 把控了。

等待對列就是存放那些等待的想進入這個臨界區的線程們,條件變量就是對應著我們上面代碼的IdCard,調用了wait()就表示不滿足我們的條件,所以讓當前線程進去條件變量等待對列!

再調用notifyAll()表面現在條件滿足了!然后那些條件對待對列中的所有線程出去到等待對列中排隊了!

這里說說為什么用notifyAll()而不是notify(),因為notify()是隨機喚醒一個條件變量等待對列中的線程去讓他們出去繼續排隊!那就是有可能一些線程永遠不會被通知到!那不玩完了么?所以推薦使用notifyAll();

還有一點我們用了

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

為什么加了個while循環再一次對條件進行判斷呢?

因為notifyAll()的時候你的條件是滿足的!但是你又出去排隊了,那指不定排隊輪到你的之后條件又不滿足了!所以需要加個while循環!

還有如果你用的是Lock其實也是一樣的意思!

所以引入了"等待-通知"機制提高了我們代碼執行的效率!

到此,關于“Java互斥的"等待-通知"機制”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西畴县| 阆中市| 门源| 寻甸| 双江| 普兰店市| 大安市| 遵义县| 河曲县| 阜平县| 通山县| 齐齐哈尔市| 阳高县| 菏泽市| 云林县| 海盐县| 江陵县| 从江县| 四子王旗| 蚌埠市| 辰溪县| 陕西省| 迭部县| 奎屯市| 通州区| 新和县| 蒲江县| 青岛市| 扎鲁特旗| 延川县| 鹰潭市| 康平县| 峨眉山市| 高州市| 灵璧县| 甘肃省| 泰和县| 城步| 安平县| 漯河市| 宾阳县|