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的異常。