是否釋放鎖:調用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