線程的生命的週期和sleep、wait、yield方法

線程的生命週期:

sleepwait方法區別:

wait是Object中的方法,而sleep是Thread中的方法。

sleep是Thread類中的靜態方法。無論是在a線程中調用b的sleep方法,還是b線程中調用a的sleep方法,誰調用,誰睡覺。

最主要的是sleep方法調用之後,並沒有釋放鎖。使得線程仍然可以同步控制。sleep不會讓出系統資源;調用此方法會讓當前線程暫停執行指定的時間,將執行機會(CPU)讓給其他線程,但是對象的鎖依然保持,因此休眠時間結束後會自動恢復(線程回到就緒狀態)。

 而wait是進入線程等待池中等待,釋放鎖,讓出系統資源。

調用wait方法的線程,不會自己喚醒,需要線程調用 notify / notifyAll 方法喚醒等待池中的所有線程,纔會進入就緒隊列中等待系統分配資源。sleep方法會自動喚醒,如果時間不到,想要喚醒,可以使用interrupt方法強行打斷。Thread.sleep(0) // 觸發操作系統立刻重新進行一次CPU競爭。

使用範圍:

sleep可以在任何地方使用。而wait,notify,notifyAll只能在同步控制方法或者同步控制塊中使用;

sleep必須捕獲異常,而wait,notify,notifyAll的不需要捕獲異常。

 

來自 <https://www.cnblogs.com/ArsenalArsig/p/9149263.html>

 

sleepyield方法區別:

 

1.sleep()方法給其他線程運行機會時不考慮線程的優先級,因此會給低優先級的線程以運行的機會;yield()方法只會給相同優先級或更高優先級的線程以運行的機會;

2. 線程執行sleep()方法後轉入阻塞(blocked)狀態,而執行yield()方法後轉入就緒(ready)狀態;

3.sleep()方法聲明拋出InterruptedException,而yield()方法沒有聲明任何異常;

4. sleep()方法比yield()方法(跟操作系統CPU調度相關)具有更好的可移植性。

來自:https://blog.csdn.net/jackfrued/article/details/44921941

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章