Java并發(fā):await/wait 與sleep、yield間的區(qū)別

是否釋放鎖:調用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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應的一些線程函數(shù)用法、概述等。在這之前...
    4ea0af17fd67閱讀 633評論 2 17
  • 進程和線程 進程 所有運行中的任務通常對應一個進程,當一個程序進入內存運行時,即變成一個進程.進程是處于運行過程中...
    勝浩_ae28閱讀 5,257評論 0 23
  • 0 前言 當線程被創(chuàng)建并啟動以后,它既不是一啟動就進入了執(zhí)行狀態(tài),也不是一直處于執(zhí)行狀態(tài)。在線程的生命周期中,它要...
    七寸知架構閱讀 5,336評論 2 63
  • 單任務 單任務的特點是排隊執(zhí)行,也就是同步,就像再cmd輸入一條命令后,必須等待這條命令執(zhí)行完才可以執(zhí)行下一條命令...
    Steven1997閱讀 1,354評論 0 6
  • 衣服皺了 酒杯空了 思緒睡了 我睡了 黎明醒了 咖啡涼了 夢想走了 我走了 樹葉落了 春天死了 音樂停了 愛停了
    兮渺閱讀 186評論 0 0

友情鏈接更多精彩內容