Java 中sleep與wait的區別

2021-08-20 05:40:05 字數 877 閱讀 9291

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

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

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

synchronized(x)

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

5、每個物件都有乙個鎖來控制同步訪問,synchronized關鍵字可以和物件的鎖互動,來實現同步方法或同步塊。

sleep()方法

正在執行的執行緒主動讓出cpu(然後cpu就可以去執行其他任務),在sleep指定時間後cpu再回到該執行緒繼續往下執行(

注意:sleep方法只讓出了cpu,而並不會釋放同步

資源鎖!!!);

wait()方法

則是指當前執行緒讓自己暫時退讓出同步資源鎖,以便其他正在等待該資源的執行緒得到該資源進而執行,只有呼叫了notify()方法,之前呼叫wait()的執行緒才會解除wait狀態,可以去參與競爭同步資源鎖,進而得到執行。(注意:notify的作用相當於叫醒睡著的人,而並不會給他分配任務,就是說notify只是讓之前呼叫wait的執行緒有權利重新參與執行緒的排程);

6、sleep()方法可以在任何地方使用;wait()方法則只能在同步方法或同步塊中使用;

7、sleep()是執行緒執行緒類(thread)的方法,呼叫會暫停此執行緒指定的時間,但監控依然保持,不會釋放物件鎖,到時間自動恢復;wait()是object的方法,呼叫會放棄物件鎖,進入等待佇列,待呼叫notify()/notifyall()喚醒指定的執行緒或者所有執行緒,才會進入鎖池,不再次獲得物件鎖才會進入執行狀

Java中sleep 與wait 區別

1 每個物件都有乙個鎖來控制同步訪問,synchronized關鍵字可以和物件的鎖互動,來實現同步方法或同步塊。sleep 方法正在執行的執行緒主動讓出cpu 然後cpu就可以去執行其他任務 在sleep指定時間後cpu再回到該執行緒繼續往下執行 注意 sleep方法只讓出了cpu,而並不會釋放同步...

Java中的sleep與wait 區分

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

java中wait 和 sleep 區別

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