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

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

Java wait和notify虛假喚醒原理

瀏覽:34日期: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久久,三上悠亚国产精品一区二区三区
日韩在线一二三区| 黄毛片在线观看| 日韩在线欧美| 日韩精品1区| 美女尤物国产一区| 欧美激情麻豆| 人人香蕉久久| 亚洲综合日韩| 欧美一级一区| 九九99久久精品在免费线bt| 色综合五月天| 亚洲午夜91| 精品一区欧美| 欧美专区一区| 92国产精品| 六月婷婷一区| 欧美日韩激情在线一区二区三区| 国产探花一区| 欧美精选视频一区二区| 亚州av一区| 午夜欧美在线| 欧美91在线| 欧美一区精品| 亚洲福利精品| 国产欧美日韩亚洲一区二区三区| 日本不良网站在线观看| 男人的天堂亚洲一区| 精品亚洲a∨| 免费看黄色91| 性欧美videohd高精| 日韩激情啪啪| 色综合狠狠操| 日韩精品免费一区二区夜夜嗨| 日产精品一区二区| 亚洲欧美日韩视频二区| 久久国产毛片| 国产成人精品一区二区三区视频| 日韩午夜视频在线| 国产国产精品| 欧美日韩精品免费观看视欧美高清免费大片 | 欧美一区免费| 欧美91精品| 久久免费国产| 超级白嫩亚洲国产第一| 国产精品欧美日韩一区| 亚久久调教视频| 玖玖玖国产精品| 亚洲激情av| 日韩天堂av| 91精品xxx在线观看| 激情综合五月| 成人国产精品一区二区网站| 欧美黑人巨大videos精品| 激情综合网五月| 日韩精品1区| 欧美日韩中文字幕一区二区三区| 国产乱子精品一区二区在线观看 | 麻豆久久精品| 99久久视频| 亚洲伦乱视频| 国产高清久久| 亚洲免费中文| 中文无码日韩欧| 久久精品国产68国产精品亚洲| 欧美二三四区| 欧美综合另类| 欧美日韩国产一区精品一区| 免费久久精品视频| 精品一区二区三区免费看| 欧美日本二区| 午夜在线视频观看日韩17c| 日韩欧美一区二区三区在线视频| 久久久久久亚洲精品美女| 亚欧成人精品| 蜜桃传媒麻豆第一区在线观看 | 狠狠色综合网| 日韩av首页| 亚洲天堂av影院| 久久在线电影| 综合精品一区| 精品久久久久久久| 国产精品99免费看| 丝袜美腿亚洲一区二区图片| 中文字幕日韩亚洲| 荡女精品导航| 一级欧洲+日本+国产| 丝袜美腿亚洲一区| 国产精品调教视频| 狠狠久久伊人中文字幕| 国产一区二区三区久久 | 三级精品视频| 国产日韩欧美一区二区三区| 国产一区二区色噜噜| 久久青草久久| 日韩专区视频网站| 日本午夜精品久久久| 日韩欧美综合| 亚洲精品乱码久久久久久蜜桃麻豆| 日日夜夜免费精品视频| 精精国产xxxx视频在线野外| 欧美日韩国产高清| 欧美在线看片| 在线亚洲国产精品网站| 中文字幕av一区二区三区人| 荡女精品导航| 亚洲精选成人| 美女免费视频一区| 亚洲精品一区二区在线看| 国产美女视频一区二区| 欧美国产91| 亚洲免费观看高清完整版在线观| 欧美视频一区| 91久久在线| 久久中文在线| 亚洲精品在线国产| 成人在线免费观看91| 国产亚洲久久| 91久久视频| 欧美成人a交片免费看| 亚洲欧洲av| 久久精品导航| 国产一区二区三区四区| 欧美国产极品| 麻豆高清免费国产一区| 婷婷综合成人| 日韩中文字幕| 911精品国产| 日本va欧美va瓶| 欧美日韩一区二区三区不卡视频| 日韩一区中文| 国产欧美啪啪| 麻豆精品视频在线观看视频| 欧美sss在线视频| 日本不卡免费高清视频在线| 日韩在线观看| 欧美国产偷国产精品三区| 鲁大师精品99久久久| 国产中文字幕一区二区三区| 国内不卡的一区二区三区中文字幕| 国产精品欧美大片| 91av亚洲| 综合激情一区| 久久三级毛片| 欧美日韩一二| 亚洲毛片网站| 久久精品国产99国产精品| 国产成人精选| 亚洲国产不卡| 欧美一区激情| 久久精品国产68国产精品亚洲| 久久久一二三| 亚洲精品高潮| 日本欧美国产| 日韩三区四区| 亚洲精品国产嫩草在线观看| 亚洲香蕉久久| 精品少妇av| 国产麻豆综合| www.51av欧美视频| 亚洲精品三级| 亚洲a一区二区三区| 国产精品尤物| 国产亚洲精品自拍| 欧美国产精品| 视频一区二区三区在线| 欧美日韩夜夜| 激情婷婷综合| 国产一区二区视频在线看| 国产精品毛片在线| 国产成人精品三级高清久久91| 三级欧美在线一区| 手机在线电影一区| 日韩国产一区二| 美女久久99| 日本午夜精品一区二区三区电影| 久久网站免费观看| 精品黄色一级片| 欧美激情久久久久久久久久久| 在线精品视频一区| 图片区亚洲欧美小说区| 国产精品多人| 日本大胆欧美人术艺术动态| 人在线成免费视频| 国产一区丝袜| 精品国产午夜| 久久wwww| 日韩二区三区四区| 蜜桃视频第一区免费观看| 宅男噜噜噜66国产日韩在线观看| 99精品一区| 香蕉成人av| 日本综合字幕| 亚洲91视频| 五月天综合网站| 国产精品呻吟| 一区在线免费观看| 成人在线网站| 精品日韩视频| 国产精品普通话对白| 人人爽香蕉精品|