wait 和sleep 的區別

2021-08-06 02:07:29 字數 593 閱讀 8937

執行緒在wait 後,可以被另乙個擁有相同執行緒鎖物件的執行緒通過呼叫notify方法喚醒,而 sleep不行。

wait和notify能正常執行的條件是(否則會拋異常):多個執行緒的**,都包在synchronized塊中,並且synchronized鎖的物件需要是同乙個。簡而言之,多執行緒。

當執行緒呼叫了wait方法後,就會進入等待狀態,需要另外乙個持有同乙個執行緒鎖的執行緒通過notify通知強鎖。如果有多個執行緒在等待(且synchronized 鎖物件是同乙個),則可以呼叫notifyall來喚醒。但是,只有其中乙個執行緒能搶到鎖並繼續執行(因為 wait 的執行緒都是在 synchronized 塊內,需要爭奪 synchronized 鎖)。其他的執行緒會被鎖住,直到他們再次獲得鎖。

wait 方法由 object 物件呼叫,而 sleep 則由執行緒呼叫。

sleep():「我已經完成了乙個時間片,在n微秒前,請不要再給我乙個時間片」。這時作業系統不會讓這個執行緒做任何事情,直到sleep時間結束。

wait():」我已經完成了乙個時間片,在其他執行緒呼叫notify()前,請不要再給我乙個時間片)。這時作業系統不會安排這個執行緒繼續執行,直到有人呼叫了notify()。

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...