wait/notify/notifyall 基本概念
生活随笔
收集整理的這篇文章主要介紹了
wait/notify/notifyall 基本概念
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
wait:表示持有對象鎖的線程A準備釋放對象鎖權限,釋放cpu資源并進入等待狀態。
notify:表示持有對象鎖的線程A準備釋放對象鎖權限,通知jvm喚醒某個競爭該對象鎖的線程X。線程A?synchronized?代碼執行結束并且釋放了鎖之后,線程X直接獲得對象鎖權限,其他競爭線程繼續等待(即使線程X同步完畢,釋放對象鎖,其他競爭線程仍然等待,直至有新的notify ,notifyAll被調用)。
notifyAll:notifyall和notify的區別在于,notifyAll會喚醒所有競爭同一個對象鎖的所有線程,當已經獲得鎖的線程A釋放鎖之后,所有被喚醒的線程都有可能獲得對象鎖權限?
需要注意的是:三個方法都必須在synchronized?同步關鍵字所限定的作用域中調用,否則會報錯java.lang.IllegalMonitorStateException?,意思是因為沒有同步,所以線程對對象鎖的狀態是不確定的,不能調用這些方法。?
另外,通過同步機制來確保線程從wait方法返回時能夠感知到感知到notify線程對變量做出的修改?
?
總結
以上是生活随笔為你收集整理的wait/notify/notifyall 基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Synchronized结合Java O
- 下一篇: wait/notify的基本使用