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

java notify和notifyAll的對比

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

 java notify和notifyAll

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

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

舉例1:

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

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

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

舉例2:

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

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

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

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

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

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

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

相關(guān)文章

最新評論

绥阳县| 青龙| 谢通门县| 漳州市| 西吉县| 汾西县| 澎湖县| 榆树市| 全南县| 黄冈市| 南乐县| 临江市| 天等县| 济阳县| 阳山县| 卓资县| 渭源县| 兴化市| 谢通门县| 黑水县| 芒康县| 马边| 鹰潭市| 乐昌市| 渭南市| 大荔县| 武冈市| 恩施市| 监利县| 周口市| 宿迁市| 双峰县| 隆昌县| 乌恰县| 中西区| 慈利县| 平和县| 乌鲁木齐市| 北海市| 雷山县| 汤原县|