是否釋放鎖:調用sleep和yield的時候不釋放當前線程所獲得的鎖,但是調用await/wait的時候卻釋放了其獲取的鎖并阻塞等待恋拷。
調用后何時恢復:
sleep讓線程阻塞资厉,且在指定的時間之內都不會執(zhí)行蔬顾,時間到了之后恢復到就緒狀態(tài),也不一定被立即調度執(zhí)行诀豁;
yield只是讓當前對象回到就緒狀態(tài),還是有可能馬上被再次被調用執(zhí)行娩践。
await/wait,它會一直阻塞在條件隊列之上烹骨,之后某個線程調用對應的notify/signal方法,才會使得await/wait的線程回到就緒狀態(tài)展氓,也是不一定立即執(zhí)行。
誰的方法:yield和sleep方法都是Thread類的未妹,而wait方法是Object類的簿废,await方法是Condition顯示條件隊列的络它。
執(zhí)行環(huán)境:yield和sleep方法可以放在線程中的任意位置,而await/wait方法必須放在同步塊里面单料,否則會產生運行時異常。
image.png