亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java多線程通訊之wait,notify的區別詳解

2024-07-14 08:41:48
字體:
來源:轉載
供稿:網友

下面通過代碼給大家介紹java多線程通訊之wait notify的區別,具體內容如下所示:

class Res{ public String username; public String sex;}class Out extends Thread{ Res res; public Out(Res res){  this.res=res; } @Override public void run() {  //寫操作  int count=0;  while (true){//   synchronized (res.getClass()){    if(count==0){//偶數     res.username="小明";     res.sex="男";    } else {//奇數     res.username="小紅";     res.sex="女";    }    count=(count+1)%2;//   }   } }}class Input extends Thread{ Res res; public Input(Res res){  this.res=res; } @Override public void run() {  while (true){//   synchronized (res.getClass()){    System.out.println(res.username+","+res.sex);//   }  } }}public class OutInputThread { public static void main(String[] args) {  Res res = new Res();  Out out = new Out(res);  Input input = new Input(res);  out.start();  input.start(); }}小紅,女小紅,女小紅,女小紅,女小紅,女小紅,女小紅,女小紅,女小紅,女

出現以上結果??消費者一直消費或者生產者一直生產

解決方法:生產者生產完成后消費者方可消費,否者不可消費,消費者未消費或者未消費完生產者不可生產,一次生產一次消費。其實也就是保證對res共享資源的操作同一時刻僅有同一個線程進行操作,

wait、notify、notifyAll方法

wait、notify、notifyAll是三個定義在Object類里的方法,可以用來控制線程的狀態。

這三個方法最終調用的都是jvm級的native方法。隨著jvm運行平臺的不同可能有些許差異。

 如果對象調用了wait方法就會使持有該對象的線程把該對象的控制權交出去,然后處于等待狀態。當前線程從運行變為阻塞,釋放所的資源

如果對象調用了notify方法就會通知某個正在等待這個對象的控制權的線程可以繼續運行。讓持有該鎖的線程從阻塞態變為就緒。

如果對象調用了notifyAll方法就會通知所有等待這個對象控制權的線程繼續運行。

注意:一定要在線程同步中使用,并且是同一個鎖的資源

通過以下方式即可完成需求。

生產者獲取res.getClass鎖后,如果flag為true生產者通過調用res.getClass.wait進行等待,此時其他線程可獲取該鎖,如果flag為false,進行生產,然后設置flag為true保證資源消費后方可再生產,接著通過notify通知其他喚醒其他線程。

class Res{ public String username; public String sex; //true 生產者等待,消費者可消費 false生產者可以生產,消費者不可消費 public boolean flag=false;}class Out extends Thread{ Res res; public Out(Res res){  this.res=res; } @Override public void run() {  //寫操作  int count=0;  while (true){   synchronized (res.getClass()){    if(res.flag){     try {      res.getClass().wait();//讓當前線程從運行變為阻塞,并且釋放所的資源     } catch (InterruptedException e) {      e.printStackTrace();     }    }    if(count==0){//偶數     res.username="小明";     res.sex="男";    } else {//奇數     res.username="小紅";     res.sex="女";    }    count=(count+1)%2;    res.flag=true;    res.getClass().notify();   }   } }}class Input extends Thread{ Res res; public Input(Res res){  this.res=res; } @Override public void run() {  while (true){   synchronized (res.getClass()){    if(!res.flag){     try {      res.getClass().wait();     } catch (InterruptedException e) {      e.printStackTrace();     }    }    System.out.println(res.username+","+res.sex);    res.flag=false;    res.getClass().notify();   }  } }}public class OutInputThread { public static void main(String[] args) {  Res res = new Res();  Out out = new Out(res);  Input input = new Input(res);  out.start();  input.start(); }}

輸出如下:

小明,男
小紅,女
小明,男
小紅,女
小明,男
小紅,女
小明,男
小紅,女

如果去掉notify會怎樣?去掉一個?去掉兩個?

去掉一個生產者可以打印多個(但是也不多),去掉消費者僅可打印一個,去掉兩個可能不打印,也可能打印1個,所以wait、notify必須成對使用

wait(用于同步中)與sleep區別?

都是做休眠,wait需要notify

對于sleep方法,我們首先要知道該方法是屬于Thread類中的。而wait方法,則是屬于Object類中的。

sleep方法導致了程序暫停執行指定的時間,讓出cpu該其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。

在調用sleep方法的過程中,線程不會釋放對象鎖。

而當調用wait方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify方法后本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態。

總結

以上所述是小編給大家介紹的Java多線程通訊之wait,notify的區別詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人乱色短篇合集| 国产日韩在线亚洲字幕中文| 日韩精品在线观看一区| 深夜精品寂寞黄网站在线观看| 亚洲美女在线观看| 麻豆国产va免费精品高清在线| 国产精品极品美女粉嫩高清在线| 97人洗澡人人免费公开视频碰碰碰| 国产精品v日韩精品| 综合国产在线观看| 精品国产一区二区三区久久狼黑人| 7777精品久久久久久| 国产欧美精品一区二区三区-老狼| 日本亚洲欧洲色| 欧美激情xxxxx| 久久成人免费视频| 欧美二区乱c黑人| 国产精品第一视频| 国产精品毛片a∨一区二区三区|国| 免费97视频在线精品国自产拍| 欧美一区第一页| 国产精品日日摸夜夜添夜夜av| 亚洲综合在线播放| 亚洲乱码一区二区| 国产精品高清在线观看| 久久精品一本久久99精品| 久久久久久美女| 免费99精品国产自在在线| 亚洲人成在线免费观看| 91久久夜色精品国产网站| 亚洲一区中文字幕| 亚洲精品国产精品自产a区红杏吧| 亚洲深夜福利视频| 亚洲片在线资源| 日韩在线视频免费观看高清中文| 亚洲sss综合天堂久久| 57pao成人国产永久免费| 色综合伊人色综合网站| 精品自在线视频| 色天天综合狠狠色| 亚洲天堂av在线免费| 91大神在线播放精品| 亚洲人成电影网站色xx| 热re99久久精品国产66热| 欧美中文在线观看| 97久久超碰福利国产精品…| 欧美成人免费va影院高清| 91精品久久久久久久| 日韩免费在线视频| 亚洲精品中文字幕av| 国内外成人免费激情在线视频| 日本欧美中文字幕| 欧美理论电影网| 国产精品久久9| 国产xxx69麻豆国语对白| 美女国内精品自产拍在线播放| 国产日韩亚洲欧美| 亚洲综合国产精品| 成人免费网站在线观看| 日本一区二区三区四区视频| 成人国内精品久久久久一区| 在线日韩av观看| 欧美与黑人午夜性猛交久久久| 91极品女神在线| 欧美专区第一页| 欧美性猛交xxxx| 日韩精品在线观| 国产国产精品人在线视| 亚洲人午夜精品免费| 色偷偷av亚洲男人的天堂| 亚洲人成绝费网站色www| 国产精品1234| 国产精品99久久久久久久久久久久| 精品国产精品三级精品av网址| 日韩欧美成人精品| 国产精品久久91| 亚洲精品二三区| 91探花福利精品国产自产在线| 波霸ol色综合久久| 日韩电影免费在线观看中文字幕| 欧美成人h版在线观看| 91久久精品久久国产性色也91| 91久久国产精品| 国产精品入口夜色视频大尺度| 亚洲男人的天堂在线播放| 亚洲精品不卡在线| 亚洲第一视频在线观看| 欧美国产精品va在线观看| 在线播放精品一区二区三区| 91色在线视频| 精品中文字幕在线| 国产精品精品久久久久久| 亚洲精品大尺度| 一个人看的www欧美| 欧美在线激情网| 亚洲国产日韩欧美综合久久| 色综合天天综合网国产成人网| 日韩在线视频观看| 亚洲成人久久久久| 欧美激情久久久久| 69**夜色精品国产69乱| 亚洲视频在线看| 91免费欧美精品| 91免费高清视频| 国产精品稀缺呦系列在线| 亚洲激情视频网站| 日韩欧美高清视频| 欧美激情高清视频| 精品自拍视频在线观看| 亚洲欧美一区二区三区在线| 欧美成人中文字幕在线| 91成人国产在线观看| 超碰精品一区二区三区乱码| 97国产精品视频| 日韩小视频在线观看| 久久久久久国产三级电影| 欧美久久精品一级黑人c片| 国产精品极品美女粉嫩高清在线| 久久久久久久久国产精品| 一区二区在线免费视频| 一区二区三区国产视频| 97超级碰碰碰久久久| 亚洲国产小视频| 久久久久久久亚洲精品| 欧美极品在线播放| 91视频-88av| 亚洲国产精品中文| 成人欧美一区二区三区在线湿哒哒| 国产精品欧美一区二区三区奶水| 欧美第一淫aaasss性| 日韩成人在线视频观看| 国产一区二区三区三区在线观看| 欧美xxxx18国产| 国产精品亚发布| 欧美激情a∨在线视频播放| 91av在线视频观看| 欧美孕妇毛茸茸xxxx| 精品久久中文字幕久久av| 97精品视频在线观看| 国产精品91久久| 最近更新的2019中文字幕| 欧美国产日韩一区二区| 在线观看国产精品91| 国产91成人在在线播放| 日韩欧美成人免费视频| 国产一区二区精品丝袜| 欧美日韩福利电影| 国产精品九九九| 亚洲国产女人aaa毛片在线| 国产成人久久精品| 久久视频在线观看免费| 亚洲影视九九影院在线观看| 日韩美女视频中文字幕| 国产精品入口免费视| 久久99精品国产99久久6尤物| 国产欧美在线播放| 性色av一区二区三区免费| 久久精品国产亚洲精品| 97国产成人精品视频| 精品综合久久久久久97| 亚洲综合中文字幕在线| 色哟哟亚洲精品一区二区| 国产一区私人高清影院| 欧美日韩在线视频一区|