1. 程式人生 > >await/wait 與sleep、yield間的區別

await/wait 與sleep、yield間的區別

是否釋放鎖:呼叫sleep和yield的時候不釋放當前執行緒所獲得的鎖,但是呼叫await/wait的時候卻釋放了其獲取的鎖並阻塞等待。

呼叫後何時恢復

# sleep讓執行緒阻塞,且在指定的時間之內都不會執行,時間到了之後恢復到就緒狀態,也不一定被立即排程執行;

# yield只是讓當前物件回到就緒狀態,還是有可能馬上被再次被呼叫執行。

# await/wait,它會一直阻塞在條件佇列之上,之後某個執行緒呼叫對應的notify/signal方法,才會使得await/wait的執行緒回到就緒狀態,也是不一定立即執行。

誰的方法:yield和sleep方法都是Thread類的,而wait方法是Object類的,await方法是Condition顯示條件佇列的。

執行環境:yield和sleep方法可以放線上程中的任意位置,而await/wait方法必須放在同步塊裡面,否則會產生執行時異常。


--------------------- 
作者:小弟季義欽 
來源:CSDN 
原文:https://blog.csdn.net/jiyiqinlovexx/article/details/51052592 
版權宣告:本文為博主原創文章,轉載請附上博文連結!