Java 中你怎樣喚醒一個阻塞的線程?


在 Java 發展史上曾經使用 suspend()、resume()方法對於線程進行阻塞喚醒,但

隨之出現很多問題,比較典型的還是死鎖問題。

解決方案可以使用以對象為目標的阻塞,即利用 Object 類的 wait()和 notify()方

法實現線程阻塞。

首先,wait、notify 方法是針對對象的,調用任意對象的 wait()方法都將導致線程

阻塞,阻塞的同時也將釋放該對象的鎖,相應地,調用任意對象的 notify()方法則

將隨機解除該對象阻塞的線程,但它需要重新獲取改對象的鎖,直到獲取成功才

能往下執行;其次,wait、notify 方法必須在 synchronized 塊或方法中被調用,

並且要保證同步塊或方法的鎖對象與調用 wait、notify 方法的對象是同一個,如

此一來在調用 wait 之前當前線程就已經成功獲取某對象的鎖,執行 wait 阻塞后當

前線程就將之前獲取的對象鎖釋放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM