1、每個物件都有乙個鎖來控制同步訪問,synchronized關鍵字可以和物件的鎖互動,來實現同步方法或同步塊。sleep()方法正在執行的執行緒主動讓出cpu(然後cpu就可以去執行其他任務),在sleep指定時間後cpu再回到該執行緒繼續往下執行(注意:sleep方法只讓出了cpu,而並不會釋放同步資源鎖!!!);
wait()方法
則是指當前執行緒讓自己暫時退讓出同步資源鎖,以便其他正在等待該資源的執行緒得到該資源進而執行,只有呼叫了notify()方法,之前呼叫wait()的執行緒才會解除wait狀態,可以去參與競爭同步資源鎖,進而得到執行。(
注意:notify的作用相當於叫醒睡著的人,而並不會給他分配任務,就是說notify只是讓之前呼叫wait的執行緒有權利重新參與執行緒的排程);
2、sleep()
方法可以在任何地方使用;wait()
方法則只能在同步方法或同步塊中使用;
3、sleep()
是執行緒執行緒類(thread)的方法,呼叫會暫停此執行緒指定的時間,但監控依然保持,不會釋放物件鎖,到時間自動恢復;wait()
是object的方法,呼叫會放棄物件鎖,進入等待佇列,待呼叫notify()/notifyall()喚醒指定的執行緒或者所有執行緒,才會進入鎖池,不再次獲得物件鎖才會進入執行狀態;
sleep與wait是否會占用cpu時間
一直對sleep與wait除了使用方法上的卻別外,還對它們是否會占用cpu時間產生了疑惑,故此做了個實驗如下:
上圖中是什麼**都沒有執行的時候的cpu利用率,下面我們執行這段**:
可以看出cpu的利用率飆公升到了65%,這時候cpu佔用率已經很高了。
下面我們測試sleep的情況:
上圖可見cpu的利用率還是在7%左右,由此可以證明
sleep方法並不會占用cpu的時間
下面我們測試wait方法:
我們可以看到cpu的利用率還是維持在6%左右的,由此得出結論
sleep()與wait()方法都不占用cpu時間及利用率
Java 中sleep與wait的區別
1 這兩個方法來自不同的類分別是thread和object 2 最主要是sleep方法沒有釋放鎖,而 wait 方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。3 wait,notify和notifyall只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用 使用範圍 s...
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...