首先,多執行緒中會使用到兩個延遲的函式,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方法的執行緒會繼續執行下去 二 區別...