java的等待/通知機制

等待/通知機制,是指一個線程A調(diào)用了對象的O的wait()方法進入等待狀態(tài),而另一個線程B調(diào)用了對象O的notify()或notifyAll()方法,線程A收到通知后從對象O的wait()方法返回,進而執(zhí)行后續(xù)動作。因此,等待通知機制需要與同步代碼塊或同步方法混合使用。

相關(guān)方法

方法名稱 描述
notify() 通知一個在對象上等待的線程,使其從wait()方法返回,而返回的前提是該線程獲取到了對象的鎖
notifyAll() 通知所有等待在該對象上的線程
wait 調(diào)用該方法的線程進入WAITING狀態(tài),只有等待另外線程的通知或被中斷才會返回,需要注意的是調(diào)用wait()方法后,會釋放對象的鎖
wait(long) 等待超時返回(單位毫秒)

注意細節(jié)

1.使用wait(),notify(),notifyAll()時需要先對調(diào)用對象加鎖。
2.調(diào)用wait()方法后,線程狀態(tài)有RUNNING變?yōu)閃AITING,并將當前線程放置到對象的等待隊列。
3.notify()或notifyAll()方法調(diào)用后,等待線程需要在調(diào)用notify()或notifyAll()的線程釋放鎖后,才有機會從wait()返回。
4.notify()方法將等待隊列中的一個等待線程從等待隊列中移到同步隊列中,被移動的線程狀態(tài)由WAITING轉(zhuǎn)為BLOCKED。
5.從wait方法返回的前提是獲得調(diào)用對象的鎖。

WaitNotify示意圖

引自[并發(fā)編程的藝術(shù)]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容