Sleep()和wait()方法的区别
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
sleep 是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep 不會(huì)釋放對(duì)象鎖。
wait 是Object 類的方法,對(duì)此對(duì)象調(diào)用wait 方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify 方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。
1、這兩個(gè)方法來(lái)自不同的類分別是Thread和Object
2、最主要是sleep方法沒(méi)有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用(使用范圍)
4、sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常
sleep方法屬于Thread類中方法,表示讓一個(gè)線程進(jìn)入睡眠狀態(tài),等待一定的時(shí)間之后,自動(dòng)醒來(lái)進(jìn)入到可運(yùn)行狀態(tài),不會(huì)馬上進(jìn)入運(yùn)行狀態(tài),因?yàn)榫€程調(diào)度機(jī)制恢復(fù)線程的運(yùn)行也需要時(shí)間,一個(gè)線程對(duì)象調(diào)用了sleep方法之后,并不會(huì)釋放他所持有的所有對(duì)象鎖,所以也就不會(huì)影響其他進(jìn)程對(duì)象的運(yùn)行。但在sleep的過(guò)程中過(guò)程中有可能被其他對(duì)象調(diào)用它的interrupt(),產(chǎn)生InterruptedException異常,如果你的程序不捕獲這個(gè)異常,線程就會(huì)異常終止,進(jìn)入TERMINATED狀態(tài),如果你的程序捕獲了這個(gè)異常,那么程序就會(huì)繼續(xù)執(zhí)行catch語(yǔ)句塊(可能還有finally語(yǔ)句塊)以及以后的代碼。
注意sleep()方法是一個(gè)靜態(tài)方法,也就是說(shuō)他只對(duì)當(dāng)前對(duì)象有效,通過(guò)t.sleep()讓t對(duì)象進(jìn)入sleep,這樣的做法是錯(cuò)誤的,它只會(huì)是使當(dāng)前線程被sleep 而不是t線程
wait屬于Object的成員方法,一旦一個(gè)對(duì)象調(diào)用了wait方法,必須要采用notify()和notifyAll()方法喚醒該進(jìn)程;如果線程擁有某個(gè)或某些對(duì)象的同步鎖,那么在調(diào)用了wait()后,這個(gè)線程就會(huì)釋放它持有的所有同步資源,而不限于這個(gè)被調(diào)用了wait()方法的對(duì)象。wait()方法也同樣會(huì)在wait的過(guò)程中有可能被其他對(duì)象調(diào)用interrupt()方法而產(chǎn)生
?
轉(zhuǎn)載自http://blog.csdn.net/congqingbin/article/details/7871862
轉(zhuǎn)載于:https://my.oschina.net/zjllovecode/blog/1524508
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Sleep()和wait()方法的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Listener(监听器)
- 下一篇: 部署WAR包实时查看Tomcat的状态和