多執行緒中的wait與sleep到底誰釋放了鎖

2021-08-15 06:50:49 字數 589 閱讀 4516

首先,多執行緒中會使用到兩個延遲的函式,wait和sleep。 

wait是object類中的方法,而sleep是thread類中的方法。

sleep是thread類中的靜態方法。無論是在a執行緒中呼叫b的sleep方法,還是b執行緒中呼叫a的sleep方法,誰呼叫,誰睡覺。 

最主要的是sleep方法呼叫之後,並沒有釋放鎖。使得執行緒仍然可以同步控制。sleep不會讓出系統資源; 

而wait是進入執行緒等待池中等待,讓出系統資源。

呼叫wait方法的執行緒,不會自己喚醒,需要執行緒呼叫 notify / notifyall 方法喚醒等待池中的所有執行緒,才會進入就緒佇列中等待系統分配資源。sleep方法會自動喚醒,如果時間不到,想要喚醒,可以使用interrupt方法強行打斷。

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

使用範圍:

sleep可以在任何地方使用。而wait,notify,notifyall只能在同步控制方法或者同步控制塊中使用。 

sleep必須捕獲異常,而wait,notify,notifyall的不需要捕獲異常。

多執行緒sleep與wait的區別

package com.huawei.interview public class thread1 implements runnablecatch exception e system.out.println thread1 is going on system.out.println threa...

多執行緒中的wait與sleep到底誰釋放了鎖

呼叫wait方法的執行緒,不會自己喚醒,需要執行緒呼叫 notify notifyall 方法喚醒等待池中的所有執行緒,才會進入就緒佇列中等待系統分配資源。sleep方法會自動喚醒,如果時間不到,想要喚醒,可以使用interrupt方法強行打斷。thread.sleep 0 觸發作業系統立刻重新進行...

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

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