(五十二)sleep()與wait()方法區別

2022-10-11 04:33:08 字數 945 閱讀 9503

一、對鎖的處理機制不同

sleep()方法:不釋放鎖

正在執行的執行緒主動讓出cpu(然後cpu就可以去執行其他任務),在sleep指定時間後cpu再回到該執行緒繼續往下執行,不涉及執行緒間的通訊(注意:sleep方法只讓出了cpu,而並不會釋放同步資源鎖!!!);

你想要讓當前執行緒不考慮其他執行緒的感受,只是自己暫時不幹活而已

wait()方法:釋放鎖

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

二、使用區域不同

sleep()方法可以在任何地方使用;

wait()方法則只能在同步方法或同步塊中使用

三、原理不同

sleep()方法是thread類的靜態方法,是執行緒用來控制自身流程的,它會使此執行緒暫停執行一段時間,而把執行機會讓給其他執行緒,等到時間一到,此執行緒會自動「甦醒」

wait()方法是object類的方法,用來執行緒間的通訊,這個方法會使當前擁有該物件鎖的執行緒等待,直到其他執行緒呼叫notify()方法。(wait---notify是成對出現的)

四、使用選擇

sleep()方法並不會釋放鎖標誌,容易造成死鎖情況。因此,一般情況下,不推薦用sleep(),而應用wait()

sleep )方法與wait 方法的區別

sleep 和wait 方法都是可以讓執行緒停止執行的方法,但是兩者有很多的不同之處。1.原理不同。sleep 是thread類的靜態方法,是執行緒用來控制自身流程的,它會使執行緒暫停一段時間,把執行機會讓給其他執行緒,等計時時間一到,此執行緒會自動 甦醒 而wait 方法時object類的方法,用...

sleep與wait的區別

sleep與wait的區別 1.都是執行緒狀態切換的操作 2.sleep一定時間後會自動喚醒,wait則需要手動notify或notifyall 3.sleep不會釋放物件鎖,thread方法 wait會放棄物件鎖,是object方法,執行後會進入等待物件鎖池的佇列中 4.notify並不會釋放鎖,...

sleep與wait的區別

sleep 就是正在執行的執行緒主動讓出 cpu,cpu 去執行其他執行緒,在 sleep 指定的時間過後,cpu 才會回到這個執行緒上繼續往下執行,如果當前執行緒進入了同步鎖,sleep 方法並不會釋 放鎖,即使當前執行緒使用 sleep 方法讓出了 cpu,但其他被同步鎖擋住了的執行緒也無 法得...