多執行緒wait 和sleep 的區別

2021-10-01 13:37:11 字數 393 閱讀 5797

wait()位於同步中,可以釋放鎖的資源

sleep()不是釋放鎖的資源

wait需要notify才能從休眠狀態變為執行狀態,sleep到期之後,會自動從休眠狀態變為執行狀態。

官方話語如下

對於sleep()方法,我們首先要知道該方法是屬於thread類中的。而wait()方法,則是屬於object類中的。

sleep()方法導致了程式暫停執行指定的時間,讓出cpu該其他執行緒,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復執行狀態。

在呼叫sleep()方法的過程中,執行緒不會釋放物件鎖。

而當呼叫wait()方法的時候,執行緒會放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件呼叫notify()方法後本執行緒才進入物件鎖定池準備獲取物件鎖進入執行狀態。

多執行緒學習 wait和sleep區別

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

JAVA多執行緒 sleep和wait的區別

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

多執行緒之sleep和wait的區別

使當前執行緒睡眠,但是並不釋放鎖 sleep是thread類的方法 sleep可以用在任何地方 sleep必須捕獲異常 使當前程序等待,但是釋放鎖。wait是object類的方法 wait,包括notify和notifall只能在synchrnized修飾的方法或 塊中使用 sleep不需要捕獲異常...