首頁  >  文章  >  Java  >  sleep(), wait(), yield()之間的區別與使用

sleep(), wait(), yield()之間的區別與使用

零下一度
零下一度原創
2017-06-30 09:56:483011瀏覽

    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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn