java執行緒wait與sleep的區別

2021-08-27 09:30:36 字數 608 閱讀 3901

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(milliseconds)可以用時間指定使它自動喚醒過來,如果時間不到只能呼叫interrupt()強行打斷。

thread.sleep(0)的作用是「觸發作業系統立刻重新進行一次cpu競爭」。

3、使用範圍:wait,notify和notifyall只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用

synchronized(x)

4、sleep必須捕獲異常,而wait,notify和notifyall不需要捕獲異常

java執行緒Lock的wait

如果lock在lock.lock 之後進入lock.wait 那麼所有的獲取lock.lock 的 都會被阻塞。但是synchronized lock 這個 可以被執行,且只有執行喚醒之後才能使得程式繼續走。看 class r1 implements runnable catch interrupt...

Java中sleep 與wait 區別

1 每個物件都有乙個鎖來控制同步訪問,synchronized關鍵字可以和物件的鎖互動,來實現同步方法或同步塊。sleep 方法正在執行的執行緒主動讓出cpu 然後cpu就可以去執行其他任務 在sleep指定時間後cpu再回到該執行緒繼續往下執行 注意 sleep方法只讓出了cpu,而並不會釋放同步...

總結 Java多執行緒中wait和sleep的區別

一 對wait和sleep的個人理解 wait表示等待的意思,當執行緒呼叫wait方法時,執行緒將會處於等待狀態,如果想要再次執行呼叫過wait方法的執行緒需要將其喚醒,使其脫離等待狀態 sleep表示休眠的意思,這種休眠是有時間限制的,休眠時間到了執行sleep方法的執行緒會繼續執行下去 二 區別...