創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
在平邑等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,平邑網(wǎng)站建設(shè)費(fèi)用合理。java notify和notifyAll
首先從名字可以了解,notify是通知一個線程獲取鎖,notifyAll是通知所有相關(guān)的線程去競爭鎖。
notify不能保證獲得鎖的線程,真正需要鎖,并且可能產(chǎn)生死鎖。
舉例1:
所有人(消費(fèi)者線程)準(zhǔn)備吃飯,食堂沒有開放(沒有釋放鎖)打飯窗口(鎖),所有人等待(WAITING)。
食堂開飯打飯窗口(釋放鎖),并廣播消息“開飯了”(notifyAll),所有人競爭排隊(duì),并等待吃飯(BLOCKED)。每一個人依次在打飯窗口(獲得鎖)打飯(RUNNABLE)。如果想吃飯就打完飯后離開(釋放鎖),不想吃飯就直接離開(釋放鎖)。如果吃完了還想吃,就主動等待下一次“開飯了”的消息(wait)。
食堂通知一個人來吃飯(notify),此人來到打飯窗口(獲得鎖)打飯(RUNNABLE),其他人都在等待開飯的消息(WAITING)。如果想吃飯就打完飯后離開(釋放鎖),不想吃飯就直接離開(釋放鎖)。如果吃完了還想吃,就主動等待下一次“開飯”的消息(WAITING)。
notify不能保證通知到真正想吃飯的人。
舉例2:
兩個生產(chǎn)者P1、P2,兩個消費(fèi)者C1、C2,共同操作一個隊(duì)列,隊(duì)列大長度為1。
開始P1、P2、C1、C2都處于運(yùn)行狀態(tài)(RUNNABLE)。
C1先獲得鎖,P1、P2、C2為BLOCKED狀態(tài)。C1發(fā)現(xiàn)隊(duì)列為空,主動進(jìn)入WAITING。C2接著獲得鎖,成為RUNNABLE狀態(tài),發(fā)現(xiàn)隊(duì)列為空,主動進(jìn)入WAITING。
P1接著獲得鎖,成為RUNNABLE狀態(tài),在隊(duì)列中插入一個元素,notify到了另一個生產(chǎn)者P2。P1循環(huán)生產(chǎn),發(fā)現(xiàn)隊(duì)列不為空,成為WAITING。
P2成為RUNNABLE狀態(tài),發(fā)現(xiàn)隊(duì)列有值,主動進(jìn)入WAITING。
此時鎖已被釋放,但P1、P2、C1、C2都處于WAITING狀態(tài),沒有線程去獲取鎖,死了。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
網(wǎng)頁題目:javanotify和notifyAll的對比-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://www.rwnh.cn/article34/jdgse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、網(wǎng)站策劃、標(biāo)簽優(yōu)化、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容