sleep()和wait()方法都是可以讓執行緒停止執行的方法,但是兩者有很多的不同之處。
1.原理不同。sleep()是thread類的靜態方法,是執行緒用來控制自身流程的,它會使執行緒暫停一段時間,把執行機會讓給其他執行緒,等計時時間一到,此執行緒會自動「甦醒」;而wait()方法時object類的方法,用於執行緒之間的通訊,這個方法會使擁有物件鎖的執行緒進入等待狀態,直到其他執行緒呼叫notify方法才能「喚醒」,當然也可以指定乙個時間醒來。
2.對鎖的處理機制不同。由於sleep()方法主要是讓執行緒暫停執行一段時間,時間一到則立即恢復執行,不涉及執行緒之間的通訊,所以呼叫sleep()方法不會釋放鎖;當呼叫wait()方法後,執行緒釋放它所占有的鎖,讓給其他執行緒去爭奪鎖。
3.使用區域不同。sleep()可以放在任何地方使用,而wait()只能放在同步方法或者同步塊中使用。
4.sleep()必須捕獲異常,而wait()不用,由於,在sleep()的時間當中有可能被物件呼叫interrupt()方法,產生interruptexception。
5.由於sleep()不會釋放鎖,容易導致「死鎖」的情況發生,在多執行緒的時候,一般情況下用wait()方法好。
(五十二)sleep()與wait()方法區別
一 對鎖的處理機制不同 sleep 方法 不釋放鎖 正在執行的執行緒主動讓出cpu 然後cpu就可以去執行其他任務 在sleep指定時間後cpu再回到該執行緒繼續往下執行,不涉及執行緒間的通訊 注意 sleep方法只讓出了cpu,而並不會釋放同步資源鎖!你想要讓當前執行緒不考慮其他執行緒的感受,只是...
sleep()和wait 方法的區別
1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...
sleep和wait 方法的區別
最近學習多執行緒時了解到sleep和wait的區別,特記錄如下 sleep 和 wait 方法的區別 1.sleep是thread的方法,wait是object的方法 2.sleep不會釋放鎖,wait會釋放鎖,並且加入到等候佇列 3.sleep依賴鎖,而wait必須定義鎖 4.sleep不需要喚醒...