java鎖——wait,notify,synchronized


背景:這篇博客用來總結java鎖相關的知識點,平時還是要自己多加練習

 

wait 和 notify以及notifyAll

(1)、方法介紹
1.wait、notify以及notifyAll都是Object對象的方法,他們必須在被 synchronized 同步的方法或代碼塊中調用,否則會報錯。
2. 調用wait方法會使該線程進入等待狀態,並且會釋放被同步對象的鎖。
3. notify操作可以喚醒一個因執行wait而處於阻塞狀態的線程,使其進入就緒狀態,被喚醒的線程會去嘗試着獲取對象鎖,然后執行wait之后的代碼。如果發出notify操作時,沒有線程處於阻塞狀態,那么該命令會忽略。注意執行notify並不會馬上釋放對象鎖,會等到執行完該同步方法或同步代碼塊后才釋放,下面會有例子來證明。
notify方法可以隨機喚醒等待隊列中等待同一共享資源的“一個”線程,使其退出等待隊列進入可運行狀態。

4. notifyAll方法可以喚醒等待隊列中等待同一共享資源的“全部”線程從等待狀態退出,進入可運行狀態。此時,優先級最高的那個線程優先執行,但也有可能是隨機執行,這取決於JVM虛擬機的實現。

最后說下 wait和sleep的區別,這也是面試經常面到的問題。

1.sleep是Thread類的方法而wait是Object類的方法。
2.sleep不會立馬釋放對象鎖,而wait會釋放。

java 多線程之wait、notify詳解(講的不錯)

java鎖之wait,notify(wait會釋放鎖,notify僅僅只是通知,不釋放鎖)

Java的wait(), notify()和notifyAll()使用小結


免責聲明!

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



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