Udemy Course Multithreading, Concurrency & Performance 29

Java原生Object當作Condition Variable — wait(),notify(),notifyAll()

ZONGRU Li
Sep 21, 2021

1.Java原生的Object class含有以下Method:

  • public final void wait() throws InterruptedException
  • public final void notify()
  • public final void notifyAll()

2.並且Java所有class繼承自Object class

3.所以可以把任何物件當作condition variable與lock(透過synchronized關鍵字)

其中

  1. wait() —造成當前的Thread等待,直到別的Thread將其喚醒

(執行wait()正在等待的Thread將不消耗CPU!)

2. 兩個可以將wait()等待的Thread喚醒

  • notify() — 喚醒等待該Object的單一個Thread
  • notifyAll() — 喚醒等待該Object的全部Thread

3. 在呼叫wait(),notify(),notifyAll()我們還需要監控Object(透過針對Object synchronized方式)

wait(),notify(),notifyAll()--範例

其實跟前面學到的Lock使用上非常像

synchronized(object){} <=>lock.lock() + lock.unlock()

object.wait() <=>condition.await()

object.notify() <=>condition.signal()

object.notifyAll() <=>condition.signalAll()

上面範例也可簡化為如下:

後面則有實際範例演練10*10矩陣的相關計算,因為code較複雜,分下一節

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet