Android Sleep和Wait區別
阿新 • • 發佈:2018-12-24
1、這兩個方法來自不同的類,sleep來自Thread類,wait 來自Object類。
sleep是Thread的靜態類方法,誰呼叫的誰去睡覺,即使是在a執行緒離呼叫了b的sleep方法,實際上還是a 去睡覺,要讓b去睡覺要在b的程式碼中呼叫sleep.
2、最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使其他執行緒可以使用同步控制塊或者方法。
sleep不出讓系統資源;wait是進入執行緒等待池等待,出讓系統資源,其他執行緒可以佔用CPU。一般wait不會加時間限制,因為如果wait執行緒的執行資源不夠,再出來也沒用,要等待其他執行緒呼叫notify/notifyAll喚醒等待池中的所有執行緒,才會進入就緒佇列等待OS分配系統資源。Sleep(millseconds)可以用時間指定使它自動喚醒過來,如果時間不到只能呼叫interrupt()強行打斷。
Thread.Sleep(0)的作用是“觸發作業系統立刻重新進行一次CPU競爭”。
3、使用範圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4、sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常。