Java並發之wait notify yield sleep join

來源:互聯網
上載者:User

標籤:mon   需要   yield   自動調用   線程阻塞   串列   同步   notify   java並發   

wait() notify/notifyAll() 是繼承自Object的方法。也就說每一個對象都有這兩個方法。

wait()在調用前需獲得monitor鎖,調用後將利用該對象的線程阻塞並釋放鎖。線程狀態由運行至阻塞。

notify()則喚醒因對象阻塞的線程。將線程由阻塞隊列轉移至就緒隊列。

 

sleep() yield() join()繼承自Thread類。其中sleep(), yield()是靜態方法,join()不是。

sleep()看起來和wait()很像,不過sleep()調用前無需獲得鎖,調用後也不會釋放鎖。它只是將線程由運行轉移至就緒。

yield()應用情境很少,幾乎可以忽略。主要原因是yield()並不保證線程一定會掛起(),具體決定還是由調度器下。

join()比較有意思,它主要用於父子線程間同步,將並行化為串列。由於join()不是static,不能由Thread直接調用,需要建立Thread對象,然後由對象調用。

而join()的作用就是,等待該Thread執行完成,然後再往下執行。由於join()內部調用wait()實現,Thread執行完成後自動調用notify(),所以Java官方文檔不建議對Thread執行個體調用wait() notify()方法。

Java並發之wait notify yield sleep join

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.