Java中sleep和wait的區別

 sleep()、suspend()、resume()方法不推薦使用,推薦使用wait()、notify()、notifyAll()。

  sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因爲在那個時刻,其它線程可能正在運行而且沒有被調度爲放棄執行,除非

  (a)“醒來”的線程具有更高的優先級。

  (b)正在運行的線程因爲其它原因而阻塞。

  wait()是線程交互時,如果線程對一個同步對象x 發出一個wait(www.37meishi.com)調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。

  當調用wait()後,線程會釋放掉它所佔有的“鎖標誌”,從而使線程所在對象中的其它synchronized數據可被別的線程使用。

  waite()和notify()因爲會對對象的“鎖標誌”進行操作,所以它們必須在synchronized函數或synchronized block中進行調用。如果在non-synchronized函數或non-synchronized block中進行調用,雖然能編譯通過,但在運行時會發生IllegalMonitorStateException的異常。

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