wait和notify和wait set


①  wait() 與 notify/notifyAll 方法必須在同步代碼塊中使用

  synchronized修飾的同步代碼塊或方法里面調用wait() 與 notify/notifyAll()方法

②  wait() 與  notify/notifyAll() 區別

  當執行wait()時,線程會把持有的鎖立即釋放,線程加入lock的wait set 集合中,線程處於block狀態,調用對應的notify或者notifyAll方法,線程處於runnable狀態,競爭到鎖和cpu時間就重新執行

  wait(100)  線程會把持有的鎖立即釋放,線程處於block狀態,與wait()不同的是,當超過這個設置時間后,線程處於runnable狀態,重新競爭鎖和cpu時間來執行,當然也可以在線程block時,調用notify使其恢復到runnbale狀態

       當執行notify/notifyAll方法時,會喚醒處於block狀態的線程,直到執行完同步塊后再釋放鎖,所以notify或者notifyAll一般寫在末尾

  notify 是喚醒一個block線程,使其處於runnable狀態,競爭獲取到鎖和CPU時間后繼續執行

  notify是喚醒所有的block線程,使他們處於runnable狀態,這些線程競爭獲取鎖和CPU時間后再繼續執行

 

 

轉載自: https://www.cnblogs.com/hapjin/p/5492645.html#undefined


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM