sleep 和 wait 有什麼區別?

2021-09-26 15:44:30 字數 752 閱讀 9847

1、這兩個方法來自不同的類分別是thread和object,sleep方法屬於thread類中的靜態方法,wait屬於object的成員方法。

2、最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。

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

sleep方法屬於thread類中方法,表示讓乙個執行緒進入睡眠狀態,等待一定的時間之後,自動醒來進入到可執行狀態,不會馬上進入執行狀態,因為執行緒排程機制恢復執行緒的執行也需要時間,乙個執行緒物件呼叫了sleep方法之後,並不會釋放他所持有的所有物件鎖,所以也就不會影響其他程序物件的執行。但在sleep的過程中有可能被其他物件呼叫它的interrupt(),產生interruptedexception異常,如果你的程式不捕獲這個異常,執行緒就會異常終止,進入terminated結束狀態,如果你的程式捕獲了這個異常,那麼程式就會繼續執行catch語句塊(可能還有finally語句塊)以及以後的**。

wait屬於object的成員方法,一旦乙個物件呼叫了wait方法,必須要採用notify()和notifyall()方法喚醒該執行緒;如果執行緒擁有某個或某些物件的同步鎖,那麼在呼叫了wait()後,這個執行緒就會釋放它持有的所有同步資源,而不限於這個被呼叫了wait()方法的物件。wait()方法也同樣會在wait的過程中有可能被其他物件呼叫interrupt()方法而產生interruptedexception,效果以及處理方式同sleep()方法.

sleep 和 wait 有什麼區別

網上的答案 sleep 是執行緒類 thread 的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫 sleep 不會釋放物件鎖。wait 是object 類的方法,對此物件呼叫 wait 方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池...

sleep 和 wait 有什麼區別

網上的答案 sleep是執行緒類 thread 的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。wait是object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物...

sleep 和 wait 有什麼區別???

sleep 是thread類的方法,執行緒在執行的時候呼叫了sleep 之後會暫停執行,讓出cpu去執行其他執行緒,在sleep指定的時間過後,cpu才會回到這個執行緒上繼續往下執行,但是如果此執行緒也進入了同步鎖,那麼它會讓出cpu卻不會釋放物件鎖,後續需要同步鎖的執行緒也就依然不會執行 wait...