最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)備吃飯,食堂沒(méi)有開放(沒(méi)有釋放鎖)打飯窗口(鎖),所有人等待(WAITING)。

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

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

舉例2:

兩個(gè)生產(chǎn)者P1、P2,兩個(gè)消費(fèi)者C1、C2,共同操作一個(gè)隊(duì)列,隊(duì)列最大長(zhǎng)度為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),沒(méi)有線程去獲取鎖,死了。

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

相關(guān)文章

最新評(píng)論

铜鼓县| 咸阳市| 神木县| 萨迦县| 黄山市| 荔波县| 阿克苏市| 万山特区| 北海市| 温宿县| 天峻县| 禄劝| 山阴县| 萍乡市| 光山县| 从化市| 罗定市| 聊城市| 嘉兴市| 浦县| 霍邱县| 扎鲁特旗| 武川县| 蒲城县| 鹤山市| 宁化县| 宁武县| 扶绥县| 肥东县| 灌南县| 南开区| 成武县| 辽阳市| 彭山县| 四会市| 北宁市| 应城市| 津南区| 新安县| 昭苏县| 龙游县|