JAVA多執行緒 sleep和wait的區別

2021-09-01 22:49:19 字數 621 閱讀 7032

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不需要捕獲異常

[url]

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

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

多執行緒之sleep

還是使用join 學習的例子。實驗 如下 package thread public class jointest implements runnable public static void main string args throws exception 實驗結果是0,具體原因見本人部落格多執...

多執行緒學習 wait和sleep區別

1.wait可以指定時間也可以不指定,sleep必須指定時間。2.在同步是,對cpu的執行權和鎖的處理不同 知識點 執行權,有執行權,那麼意味了一直占用cpu在執行,其它執行緒分配不到cpu wait 釋放執行權,釋放鎖 很好理解,不指定時間,那麼他必須要等別人喚醒,如果不釋放鎖和執行權,那麼其他執...