1. 程式人生 > >sleep()方法與wait()方法有什麼區別?

sleep()方法與wait()方法有什麼區別?

個人部落格:小景哥哥

sleep()方法與wait()方法有什麼區別?

sleep()是使執行緒暫停執行一段時間的方法。wait()也是一種使執行緒暫停執行的方法。二者區別為:

①原理不同。

​ sleep()方法是Thread類的靜態方法,是執行緒用來控制自身流程的,它會使此執行緒暫停執行一段時間,而把執行機會讓給其他執行緒,等到計時時間一到,此執行緒會自動甦醒。而wait()方法是Object類的方法,用於執行緒間的通訊,這個方法會使當前擁有該物件鎖的程序等待,直到其他執行緒用呼叫notify()或notifyAll()時才甦醒過來,開發人員也可以給它指定一個時間使其自動醒來。

②對鎖的處理機制不同。

​ 由於sleep()方法的主要作用是讓執行緒暫停一段時間,時間一到則自動恢復,不涉及執行緒間的通訊,因此呼叫sleep()方法並不會釋放鎖。而wait()方法則不同,當呼叫wait()方法後,執行緒會釋放掉它所佔用的鎖,從而使執行緒所在物件中的其他synchronized資料可被別的執行緒使用。

③使用區域不同。

​ wait()方法必須放在同步控制方法或者同步語句塊中使用,而sleep方法則可以放在任何地方使用。

​ sleep()方法必須捕獲異常,而wait()、notify()、notifyAll()不需要捕獲異常。在sleep的過程中,有可能被其他物件呼叫它的interrupt(),產生InterruptedException異常。

​ 由於sleep不會釋放鎖標誌,容易導致死鎖問題的發生,一般情況下,不推薦使用sleep()方法,而推薦使用wait()方法。