1. 程式人生 > >《Java多執行緒程式設計實戰》——第4章 Guarded Suspension(保護性暫掛)模式

《Java多執行緒程式設計實戰》——第4章 Guarded Suspension(保護性暫掛)模式

一個執行緒等待另一個執行緒完成一定的操作,才能繼續執行。
核心思想是如果某個執行緒執行特定的操作前需要滿足一定的條件,則在該條件未滿足時將該執行緒暫停執行(waiting)。

類圖

如果頻繁出現保護方法被呼叫時保護條件不成立,那麼保護方法的執行執行緒就會頻繁地被暫掛和喚醒,而導致頻繁的上下文切換
為了保證保護條件中涉及的變數的記憶體可見性而引入ReentrantLock鎖。使用該鎖時需要注意臨界區中的程式碼無論是執行正常還是出現溢位,進入臨界區前獲得的鎖例項都應該被釋放。
標準程式碼
await方法使得當前執行緒暫掛後,執行緒被喚醒後要繼續檢測保護條件,防止過早喚醒:其他保護條件喚醒了執行緒,或者欺騙性喚醒。
標準程式碼
Condition例項的await方法在其被呼叫之後返回之前

會釋放與其所屬的Condition例項所關聯的鎖!

JAVA標準庫例項

java.util.concurrent.LinkedBlockingQueue