wait 和 sleep 的區別

2021-10-09 15:12:57 字數 964 閱讀 2686

1、 sleep 來自 thread 類,和 wait 來自 object 類。 2、最主要是sleep方法沒有釋放鎖,而wait方法釋放了

鎖,使得其他執行緒可以使用同步控制塊或者方法。

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

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

(1) sleep 方法屬於 thread 類中方法,表示讓乙個執行緒進入睡眠狀態,等待一定的時間之後,自動醒來進入到可

執行狀態,不會馬上進入執行狀態,因為執行緒排程機制恢復執行緒的執行也需要時間,乙個執行緒物件呼叫了 sleep

方法之後,並不會釋放他所持有的所有物件鎖,所以也就不會影響其他程序物件的執行。但在 sleep 的過程中過

程中有可能被其他物件呼叫它的 interrupt() ,產生 interruptedexception 異常,如果你的程式不捕獲這個異

常,執行緒就會異常終止,進入 terminated 狀態,如果你的程式捕獲了這個異常,那麼程式就會繼續執行catch語

句塊(可能還有 finally 語句塊)以及以後的**。

注意 sleep() 方法是乙個靜態方法,也就是說他只對當前物件有效,通過 t.sleep() 讓t物件進入 sleep ,這樣

的做法是錯誤的,它只會是使當前執行緒被 sleep 而不是 t 執行緒

(2) wait 屬於 object 的成員方法,一旦乙個物件呼叫了wait方法,必須要採用 notify() 和 notifyall() 方法

喚醒該程序;如果執行緒擁有某個或某些物件的同步鎖,那麼在呼叫了 wait() 後,這個執行緒就會釋放它持有的所有

同步資源,而不限於這個被呼叫了 wait() 方法的物件。 wait() 方法也同樣會在 wait 的過程中有可能被其他對

象呼叫 interrupt() 方法而產生 。

sleep和wait的區別

關鍵字 sleep wait 1 這兩個方法來自不同的類分別是thread和object 2 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。3 wait,notify和notifyall只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在...

sleep 和 wait的區別

1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...

sleep和wait的區別

1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...