Udemy Course Multithreading, Concurrency & Performance 29
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關鍵字)
其中
- 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較複雜,分下一節