sleep() 和 wait() 有什麼區別:

 

①原理不一樣。線程

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

​ ②對鎖的處理機制不一樣。進程

​ 因爲sleep()方法的主要做用是讓線程暫停一段時間,時間一到則自動恢復,不涉及線程間的通訊,所以調用sleep()方法並不會釋放鎖。而wait()方法則不一樣,當調用wait()方法後,線程會釋放掉它所佔用的鎖,從而使線程所在對象中的其餘synchronized數據可被別的線程使用。開發

​ ③使用區域不一樣。同步

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

​ sleep()方法必須捕獲異常,而wait()、notify()、notifyAll()不須要捕獲異常。在sleep的過程當中,有可能被其餘對象調用它的interrupt(),產生InterruptedException異常。io

​ 因爲sleep不會釋放鎖標誌,容易致使死鎖問題的發生,通常狀況下,不推薦使用sleep()方法,而推薦使用wait()方法。原理

相關文章
相關標籤/搜索