sleep, 執行緒休眠,讓直行的執行緒暫停一段時間,進入計時等待狀態。
方法:static void sleep(long millis) 呼叫sleep後,目前執行緒放棄CPU,在指定時間段內,sleep所在的執行緒不會獲得執行的機會。此狀態下的執行緒不會釋放同步鎖定/同步監聽器。
此方法更多用於模擬網路延遲,讓多執行緒並發存取同一個資源的錯誤效果更明顯。
wait, 執行緒通訊方法,java.lang.Object類別提供了兩類用於操作執行緒通訊的方法。
wait():執行該方法的執行緒物件釋放同步鎖定,JVM將該執行緒存放到等待池中,等待其他的執行緒喚醒該執行緒。
notify():執行此方法的執行緒喚醒在等待池中等待的任意一個線程,把執行緒轉到鎖定池中等待。
notifyAll():執行該方法的線程喚醒在等待池中等待的所有的線程,把線程轉到鎖定池中等待。
(注意:上述方法只能被同步監聽鎖定物件來調用,否則報告錯誤IllegalMonitorStateException.)
yield,執行緒禮讓,表示當前線程物件提示調度器自己願意讓出CPU,但是調度器可以自由的忽略提示。
呼叫該方法之後,執行緒物件進入就緒狀態,所以完全有可能:某個執行緒呼叫了 yield()之後,執行緒調度器又把它調度出來重新執行。
從Java7 提供的文件上可以清楚的看出,開發中很少會使用到該方法,該方法主要用於調試或測試,它可能有助於因多線程競爭條件下的錯誤重新現象。
另外:sleep方法和yield方法的差別:
1.都能讓目前處於運作狀態的執行緒放棄CPU,把運作的機會給其他執行緒。
2.sleep方法會給其他執行緒運行機會,但不考慮其他執行緒的優先權,yield方法只會給相同優先權或更高優先權的執行緒運行機會。
3.呼叫sleep方法後,執行緒進入計時等待狀態,呼叫yield方法後,執行緒進入就緒狀態。
執行緒的宣告週期圖:
#
以上是sleep(), wait(), yield()之間的區別與使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!