亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java notify和notifyAll的對(duì)比

 更新時(shí)間:2017年02月09日 17:16:12   投稿:lqh  
這篇文章主要介紹了 java notify和notifyAll的對(duì)比的相關(guān)資料,需要的朋友可以參考下

 java notify和notifyAll

首先從名字可以了解,notify是通知一個(gè)線程獲取鎖,notifyAll是通知所有相關(guān)的線程去競(jìng)爭(zhēng)鎖。

notify不能保證獲得鎖的線程,真正需要鎖,并且可能產(chǎn)生死鎖。

舉例1:

所有人(消費(fèi)者線程)準(zhǔn)備吃飯,食堂沒有開放(沒有釋放鎖)打飯窗口(鎖),所有人等待(WAITING)。

食堂開飯打飯窗口(釋放鎖),并廣播消息“開飯了”(notifyAll),所有人競(jìng)爭(zhēng)排隊(duì),并等待吃飯(BLOCKED)。每一個(gè)人依次在打飯窗口(獲得鎖)打飯(RUNNABLE)。如果想吃飯就打完飯后離開(釋放鎖),不想吃飯就直接離開(釋放鎖)。如果吃完了還想吃,就主動(dòng)等待下一次“開飯了”的消息(wait)。

食堂通知一個(gè)人來吃飯(notify),此人來到打飯窗口(獲得鎖)打飯(RUNNABLE),其他人都在等待開飯的消息(WAITING)。如果想吃飯就打完飯后離開(釋放鎖),不想吃飯就直接離開(釋放鎖)。如果吃完了還想吃,就主動(dòng)等待下一次“開飯”的消息(WAITING)。
notify不能保證通知到真正想吃飯的人。

舉例2:

兩個(gè)生產(chǎn)者P1、P2,兩個(gè)消費(fèi)者C1、C2,共同操作一個(gè)隊(duì)列,隊(duì)列最大長度為1。

開始P1、P2、C1、C2都處于運(yùn)行狀態(tài)(RUNNABLE)。

C1先獲得鎖,P1、P2、C2為BLOCKED狀態(tài)。C1發(fā)現(xiàn)隊(duì)列為空,主動(dòng)進(jìn)入WAITING。C2接著獲得鎖,成為RUNNABLE狀態(tài),發(fā)現(xiàn)隊(duì)列為空,主動(dòng)進(jìn)入WAITING。

P1接著獲得鎖,成為RUNNABLE狀態(tài),在隊(duì)列中插入一個(gè)元素,notify到了另一個(gè)生產(chǎn)者P2。P1循環(huán)生產(chǎn),發(fā)現(xiàn)隊(duì)列不為空,成為WAITING。

P2成為RUNNABLE狀態(tài),發(fā)現(xiàn)隊(duì)列有值,主動(dòng)進(jìn)入WAITING。

此時(shí)鎖已被釋放,但P1、P2、C1、C2都處于WAITING狀態(tài),沒有線程去獲取鎖,死了。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 如何實(shí)用Java實(shí)現(xiàn)合并、拆分PDF文檔

    如何實(shí)用Java實(shí)現(xiàn)合并、拆分PDF文檔

    這篇文章主要介紹了如何實(shí)用Java實(shí)現(xiàn)合并、拆分PDF文檔,處理PDF文檔時(shí),這樣的好處是對(duì)文檔的存儲(chǔ)、管理很方便。下面將通過Java程序代碼介紹具體的PDF合并、拆分的方法,需要的朋友可以參考下
    2019-07-07
  • Maven引入外部jar的幾種方法(小結(jié))

    Maven引入外部jar的幾種方法(小結(jié))

    這篇文章主要介紹了Maven引入外部jar的幾種方法(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 如何使用java判斷是不是數(shù)字

    如何使用java判斷是不是數(shù)字

    這篇文章主要給大家介紹了關(guān)于如何使用java判斷是不是數(shù)字的相關(guān)資料,判斷一個(gè)字符串是否為數(shù)字是Java開發(fā)中很常見的業(yè)務(wù)需求,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 詳解Java語言中一個(gè)字符占幾個(gè)字節(jié)?

    詳解Java語言中一個(gè)字符占幾個(gè)字節(jié)?

    這篇文章主要介紹了Java語言中一個(gè)字符占幾個(gè)字節(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼

    java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼

    這篇文章主要介紹了java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼,實(shí)例涉及對(duì)xml文檔的增刪改查,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 無感NullPointerException的值相等判斷方法

    無感NullPointerException的值相等判斷方法

    當(dāng)我們需要去判斷一個(gè)?入?yún)?查庫?返回的開關(guān)變量(通常是個(gè)Integer類型的)時(shí),常常會(huì)寫如下的if-else判斷語句。但又會(huì)為在生產(chǎn)環(huán)境看到的「NullPointerException」感到困擾,遇到這個(gè)問題如何處理呢,下面小編通過本文給大家詳細(xì)講解,需要的朋友參考下吧
    2023-02-02
  • Apache?Commons?CLI構(gòu)建命令行應(yīng)用利器教程

    Apache?Commons?CLI構(gòu)建命令行應(yīng)用利器教程

    這篇文章主要為大家介紹了構(gòu)建命令行應(yīng)用利器Apache?Commons?CLI的使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之隊(duì)列

    Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之隊(duì)列

    這篇文章主要介紹了Java隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),隊(duì)列是一種特殊的線性表,只允許在表的隊(duì)頭進(jìn)行刪除操作,在表的后端進(jìn)行插入操作,隊(duì)列是一個(gè)有序表先進(jìn)先出,想了解更多相關(guān)資料的小伙伴可以參考下面文章的詳細(xì)內(nèi)容
    2022-02-02
  • Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)

    Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 基于Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)同步組件

    基于Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)同步組件

    這篇文章主要為大家詳細(xì)介紹了如何基于Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)同步組件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06

最新評(píng)論