1. 程式人生 > >sleep、wait、notify、notifyAll的區別

sleep、wait、notify、notifyAll的區別

thread notify ans 行為 shu 可能 read 設定 當前

Sleep 和wait

1. sleep是Thread類的靜態方法,wait是Object類中定義的方法
2. Thread.sleep不會導致鎖行為的改變,如果當前線程是擁有鎖的,那麽Thread.sleep不會讓線程釋放鎖,而wait 會釋放當前線程鎖
3. Thread.sleep需要設定休眠時間.Object.wait也可以設定wait時間,或者通過線程執行notify/notifyAll進行喚醒

技術分享圖片

notify和notifyAll

1. notify喚醒一個線程,如果有多線程在wait,可能是隨機一個

2. notifyAll喚醒所有在等待的線程,

3. 使用中盡量使用notifyAll,因為notify容易導致線程死鎖(nofity只喚醒一個,其他等待的線程沒有喚醒)

參考: https://blog.csdn.net/dreamweaver_zhou/article/details/79876805

    https://www.jianshu.com/p/25e243850bd2?appinstall=0

   https://www.cnblogs.com/happy-coder/p/6587092.html

sleep、wait、notify、notifyAll的區別