是否釋放鎖:調(diào)用sleep和yield的時(shí)候不釋放當(dāng)前線程所獲得的鎖,但是調(diào)用await/wait的時(shí)候卻釋放了其獲取的鎖并阻塞等待,。
調(diào)用后何時(shí)恢復(fù): # sleep讓線程阻塞,,且在指定的時(shí)間之內(nèi)都不會(huì)執(zhí)行,,時(shí)間到了之后恢復(fù)到就緒狀態(tài),也不一定被立即調(diào)度執(zhí)行,; # yield只是讓當(dāng)前對(duì)象回到就緒狀態(tài),,還是有可能馬上被再次被調(diào)用執(zhí)行。 # await/wait,,它會(huì)一直阻塞在條件隊(duì)列之上,,之后某個(gè)線程調(diào)用對(duì)應(yīng)的notify/signal方法,才會(huì)使得await/wait的線程回到就緒狀態(tài),,也是不一定立即執(zhí)行,。
誰的方法:yield和sleep方法都是Thread類的,而wait方法是Object類的,,await方法是Condition顯示條件隊(duì)列的,。
執(zhí)行環(huán)境:yield和sleep方法可以放在線程中的任意位置,而await/wait方法必須放在同步塊里面,,否則會(huì)產(chǎn)生運(yùn)行時(shí)異常,。
|
|