Java中sleep 和wait 的區別

2021-08-31 04:59:45 字數 940 閱讀 4035

1. 這兩個方法來自不同的類,sleep方法屬於thread,wait方法屬於object。

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

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

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

詳解:sleep方法屬於thread類中方法,表示讓乙個執行緒進入睡眠狀態,等待一定的時間之後,自動醒來進入到可執行狀態,但它不會馬上進入執行狀態,因為其它執行緒可能正在執行而且沒有被排程為放棄執行,除非(a)「醒來」的執行緒具有更高的優先順序; (b)正在執行的執行緒因為其它原因而阻塞。 乙個執行緒物件呼叫了sleep方法之後,並不會釋放他所持有的所有物件鎖,所以也就不會影響其他程序物件的執行。但在 sleep的過程中過程中有可能被其他物件呼叫它的interrupt(),產生interruptedexception異常,如果你的程式不捕獲這個異常,執行緒就會異常終止,進入terminated狀態,如果你的程式捕獲了這個異常,那麼程式就會繼續執行catch語句塊(可能還有finally語句塊)以及以後的**。注意sleep()方法是乙個靜態方法,也就是說他只對當前物件有效,不能通過t.sleep()讓t物件進入sleep。

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

java中wait 和 sleep 區別

1,wait可以指定時間也可以不指定。sleep必須指定時間。2,在同步中時,對cpu的執行權和鎖的處理不同。wait 釋放執行權,釋放鎖。sleep 釋放執行權,不釋放鎖。public class test1 class mythread extends thread override publi...

Java中wait和sleep區別

super類不同 對於sleep 方法是屬於thread類,而wait 方法,則是屬於object類。是否釋放執行緒鎖 在呼叫sleep 方法的過程中,執行緒不會釋放物件鎖。而當呼叫wait 方法的時候,執行緒會放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件呼叫notify 方法後本執行緒才...

關於JAVA中sleep和wait

腦殼疼,今天傍晚看到sleep和wait時,頭腦中的概念也的確是模糊不清,然後又是一頓搜尋,明白了不少。1.sleep 是屬於thread類,而wait是屬於object類的且必須和notify或notifyall 一起搭配使用。sleep是執行緒控制自身的流程,而wait則屬於執行緒間通訊。該執行...