Wait(),sleep()區別

① 原理不同。sleep()方法是Thread類的靜態方法,是線程用來控制自身流程的,他會使此線程暫停執行一段時間,而把執行機會讓給其他線程,等到計時時間一到,此線程會自動甦醒。而wait()方法是object類的方法,用於線程間通信,這個方法會使當前擁有該對象鎖的進程等待,直到其他線程調用notify()方法或者notifyAll()時才醒來。

② 對鎖的 處理機制不同。由於sleep()方法的主要作用是讓線程暫停執行一段時間,時間一到則自動恢復,不涉及線程間的通信,因此,調用sleep()方法並不會釋放鎖。而wait()方法則不同,當調用wait()方法後,線程會釋放掉他所佔用的鎖,從而使線程所在對象中的其他synchronized數據可以被其他線程使用。

③ 使用區域不同。wait()方法必須放在同步控制方法和同步代碼塊中使用,sleep()方法則可以放在任何地方使用。sleep()方法必須捕獲異常,而wait()、notify()、notifyAll()不需要捕獲異常。在sleep的過程中,有可能被其他對象調用他的interrupt(),產生InterruptedException。由於sleep不會釋放鎖標誌,容易導致死鎖問題的發生,因此一般情況下,推薦使用wait()方法。


Wait(),sleep()區別


分享到:


相關文章: