java sleep 和wait 的區別

2021-06-19 08:33:44 字數 619 閱讀 2892

**:

1、這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。

sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的**中呼叫sleep。

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

sleep不出讓系統資源;wait是進入執行緒等待池等待,出讓系統資源,其他執行緒可以占用cpu。一般wait不會加時間限制,因為如果wait執行緒的執行資源不夠,再出來也沒用,要等待其他執行緒呼叫notify/notifyall喚醒等待池中的所有執行緒,才會進入就緒佇列等待os分配系統資源。sleep(milliseconds)可以用時間指定使它自動喚醒過來,如果時間不到只能呼叫interrupt()強行打斷。

thread.sleep(0)的作用是「觸發作業系統立刻重新進行一次cpu競爭」。

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

synchronized(x)

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

Java sleep和wait例項比較

1 示例 public class testsyncro class thread1 extends thread override public void run class thread2 extends thread override public void run class personc...

Java sleep和wait區別總結

執行緒的資源有不少,但應該包含cpu資源和鎖資源這兩類。1 sleep long mills 讓出cpu資源,但是不會釋放鎖資源。2 wait 讓出cpu資源和鎖資源。鎖是用來執行緒同步的,sleep long mills 雖然讓出了cpu,但是不會讓出鎖,其他執行緒可以利用cpu時間片了,但如果其...

java sleep與wait的區別

最近被問到這個問題,查詢資料後寫個例子,可看出其中差別。1 首先wait是object的方法,sleep是thread的方法。2 object.wait被某執行緒呼叫,要確保該執行緒能監控該物件,否則丟擲illegalmonitorstateexception。之後該執行緒放棄對次object的sy...