日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java wait和notify虛假喚醒原理

瀏覽:32日期:2022-09-02 17:50:07

自己在此記錄一下,方便日后復習。

虛假喚醒的概念

jdk官方文檔解釋:

Java wait和notify虛假喚醒原理

所以說在wait和notify一塊使用時,如果使用if作為條件時,會有虛假喚醒的情況發生,所以必須使用while作為循環條件。下面來舉例實驗:

首先,創建一個資源類:(在多線程中,一般都是資源類和線程操作解耦,不放在用同一個類中,只有在線程操作資源類時,才會創建資源類的對象)

package com.test;/** * 資源類 * @author Huxudong * @createTime 2020-04-01 21:57:39 **/public class Resource { /** 產品數 */ private int product = 0; /** 進貨 */ public synchronized void get() { if(product >= 10) { System.out.println(Thread.currentThread().getName()+':'+'產品已滿!'); /** 當商品已經滿的時候,進貨線程掛起 */ try {this.wait(); } catch (InterruptedException e) {e.printStackTrace(); } } /** 進貨 */ System.out.println(Thread.currentThread().getName()+':'+ ++product); /** 喚醒其他線程 */ this.notifyAll(); } /** 售貨 */ public synchronized void sale() { if(product <= 0) { System.out.println(Thread.currentThread().getName()+':'+'產品已空'); try {this.wait(); } catch (InterruptedException e) {e.printStackTrace(); } } /** 售貨 */ System.out.println(Thread.currentThread().getName()+':'+ --product); /** 喚醒其他線程 */ this.notify(); }}

然后再創建線程來操作我們的資源類(通過java8新特性Lambda表達式直接創建)

package com.test;import java.util.concurrent.TimeUnit;/** * 線程操作資源類,實現線程與資源類的解耦合 * @author Huxudong * @createTime 2020-04-01 23:13:54 **/public class TestPc { public static void main(String[] args) { Resource resource = new Resource(); new Thread(()->{ for (int i = 0; i < 20; i++) {try { /** 睡眠,便于觀察結果 */ TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) { e.printStackTrace();}resource.get(); } },'生產者A').start(); new Thread(()->{ for (int i = 0; i < 20; i++) {resource.sale(); } },'消費者C').start(); new Thread(()->{ for (int i = 0; i < 20; i++) {resource.get(); } },'生產者B').start(); new Thread(()->{ for (int i = 0; i < 20; i++) {resource.sale(); } },'消費者D').start(); }}

先來看看如果使用if條件會發生什么:

Java wait和notify虛假喚醒原理

對,你沒看錯,怎么可能會出現負數呢,這肯定是不對的。冷靜下來分析一下,還是有點頭緒,知道哪里出現了問題的(那你是一個處事不驚的人,很厲害)。

來,分析一下,一開始先調用了消費者C,D線程(因為我們寫了睡眠在生產者中),消費者此時發現此時product資源為0,所以,消費者C,D這兩個兄弟,沒辦法只能調用wait方法,睡眠了,并且釋放了鎖。

但是此時第一個消費者已經蘇醒了,發動機開始生產產品了,并且生產之后,又喚醒了所有等待的消費者線程。這消費者C,D兩兄弟終于蘇醒了,D哥們先獲得了鎖,所以就先消費了一個產品,然后就又發現沒有產品了,又傷心的休眠去了,但是不要忘了,此時還有一個C哥們被喚醒了啊,你喚醒了人家,人家總的干點什么事情吧,不然這多難受,剛好不巧的是,此時的判斷條件是if,所以此時C哥們便不受條件的約束,接著上面自己睡眠的代碼處執行,毅然決然的又去消費了一個產品,原來D哥們消費后,就已經為0了,這個C哥們再去消費減一,不就是-1了嗎,以此類推分析。發現如果判斷條件用不好,此時喚醒的C哥們就相當于虛假喚醒的了,會給程序帶來不可預估的錯誤。所以在這里判斷必須要使用while,先來看看把if換成while的結果。

Java wait和notify虛假喚醒原理

這回結果就比較正常了,為什么使用while就可以呢,因為像上文所說,即使喚醒了所有的消費者線程,此時會不停while循環判斷,如果此時條件是為0,那么C哥們就不能出while,那么他也就不回執行下面消費產品的減減操作了,那么就會避免了這種錯誤。這也是官方提倡的在使用wait 和notifyAll的時候,必須使用while循環條件判斷。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
97精品中文字幕| 欧洲一级精品| 久久福利毛片| 亚洲精品乱码| 日韩高清不卡一区二区| 鲁大师影院一区二区三区| 喷白浆一区二区| 伊人久久一区| 国产精品亚洲一区二区在线观看| 国语精品一区| 久久精品国产www456c0m| 蜜乳av另类精品一区二区| 日本麻豆一区二区三区视频| 麻豆国产91在线播放| 日韩黄色大片| 亚洲精品一二三区区别| 在线精品一区二区| 欧美精品国产一区| 久久一区视频| 国产一区清纯| 男人的天堂亚洲一区| 国产精品片aa在线观看| 免费看av不卡| 伊人国产精品| 成人午夜毛片| 一区二区国产在线观看| 国产在线不卡一区二区三区| 日韩视频中文| 美女精品久久| 另类激情亚洲| 四虎8848精品成人免费网站| 免费看欧美美女黄的网站| 另类综合日韩欧美亚洲| 宅男噜噜噜66国产日韩在线观看| 国产欧美一区二区三区米奇 | 国产一区视频在线观看免费| 日韩精品三区四区| 日韩欧美国产精品综合嫩v| 丝袜亚洲另类欧美| 国产精品欧美日韩一区| 欧美日韩视频| 日韩av网站在线免费观看| 日本一二区不卡| 香蕉视频成人在线观看| 国产精品115| 国产精品日韩久久久| 久久精品99国产精品| 亚洲国产专区校园欧美| 麻豆91在线播放| 国产精品毛片在线| 亚洲风情在线资源| 日韩黄色免费网站| 91精品99| 捆绑调教日本一区二区三区| 欧美一区成人| 久久亚洲不卡| 91精品国产自产在线观看永久∴| 国产精品17p| 日韩高清中文字幕一区| 国产婷婷精品| 久久影院一区| 中文在线中文资源| 国产精品久久| 日韩精品欧美大片| 亚洲精品一区二区在线看| 成人在线免费观看91| 国产亚洲高清一区| 中文字幕一区二区三区在线视频| 欧美成人a交片免费看| 国产精品亚洲产品| 日韩欧美久久| 亚洲人成亚洲精品| 好吊一区二区三区| 久久五月天小说| 三上悠亚国产精品一区二区三区| 麻豆成人av在线| 国产精品高清一区二区| 久久激情五月婷婷| 欧美永久精品| 午夜性色一区二区三区免费视频| 老色鬼久久亚洲一区二区| 亚洲精品一二三区区别| 日韩成人三级| 成人日韩av| 精品国产美女a久久9999| 国产日韩欧美三级| 91精品丝袜国产高跟在线| 国产精品97| 免费成人网www| 免费观看不卡av| 免费观看不卡av| 群体交乱之放荡娇妻一区二区| 成人片免费看| 日韩av二区| 韩日一区二区| 中文在线免费视频| 成人国产精品一区二区网站| 黄色欧美在线| 热三久草你在线| 成人久久久久| 久久精品播放| 黄色成人91| 久久亚洲欧洲| 婷婷亚洲成人| 国产精品一线天粉嫩av| 国产精品黄网站| 麻豆精品新av中文字幕| 久久精品二区亚洲w码| 高清日韩欧美| 日产精品一区二区| 欧美一区二区三区激情视频| 亚洲网站视频| 人人爽香蕉精品| 日韩精品视频网站| 国产毛片精品| 国产va在线视频| 国产精品av一区二区| 视频一区二区国产| 欧美日韩18| av资源中文在线| 亚洲一级高清| 老色鬼久久亚洲一区二区| 日本午夜精品久久久久| 欧美国产免费| 国产一区一一区高清不卡| 日韩电影免费网址| 2023国产精品久久久精品双| 天堂成人国产精品一区| 日韩av电影一区| 国产精品麻豆久久| 黑丝一区二区三区| 国产日韩欧美三级| 日韩欧美一区二区三区在线视频| 国产精品99免费看| 日韩黄色av| 日韩久久精品网| 国产亚洲高清视频| 国产精品网站在线看| 久久久久亚洲| 日本不卡不码高清免费观看| 久久中文字幕一区二区三区| 女人天堂亚洲aⅴ在线观看| 久久国产三级精品| 精品中文字幕一区二区三区av| 日韩av中文字幕一区| 日韩美女一区二区三区在线观看| 日韩精品一卡二卡三卡四卡无卡| 麻豆国产精品777777在线| 91久久黄色| 国内自拍视频一区二区三区| 三级欧美在线一区| 久久超碰99| 亚洲一区二区动漫| 国内不卡的一区二区三区中文字幕| 欧美日韩国产高清| 欧美国产另类| 视频一区二区三区中文字幕| 国产夫妻在线| 国产精选一区| 日韩天堂av| 国产不卡一区| 欧美日韩99| 噜噜噜躁狠狠躁狠狠精品视频| 国产成人精品福利| 婷婷五月色综合香五月| 亚洲性视频h| 精品国产亚洲一区二区三区在线 | 伊人久久成人| 91麻豆国产自产在线观看亚洲| 亚洲精品一级二级三级| 九九综合九九| 日韩电影免费在线观看| 国产精品久久国产愉拍| 爽好多水快深点欧美视频| 九九色在线视频| 久久一区国产| 青青在线精品| 亚州av日韩av| 免费欧美在线视频| 99久久精品费精品国产| 精品免费在线| 国产视频网站一区二区三区| 亚洲最大av| 视频一区二区三区入口| 午夜免费一区| 欧美 日韩 国产一区二区在线视频 | 国产视频网站一区二区三区| 老牛影视一区二区三区| 欧美日韩国产v| 国产成人调教视频在线观看| 国产亚洲高清一区| 亚洲精品九九| 中文一区一区三区免费在线观| av亚洲在线观看| 久久久影院免费| 久久久亚洲一区| 精品成人免费一区二区在线播放| 成人一区而且| 亚洲综合电影| 亚洲欧洲美洲av|