Java 併發程式設計之 Condition 介面
阿新 • • 發佈:2021-03-13
> 本文部分摘自《Java 併發程式設計的藝術》
## 概述 任意一個 Java 物件,都擁有一個監視器方法,主要包括 wait()、wait(long timeout)、notify() 以及 notifyAll() 方法,這些方法與 synchronized 同步關鍵字配合,可以實現等待 - 通知模式。Condition 介面也提供了類似 Object 的監視器方法,與 Lock 配合可以實現等待 - 通知模式 Object 的監視器方法與 Condition 介面的對比: | 對比項 | Object 監視器方法 | Condition | | ---------------------------------------------------- | ------------------------- | ------------------------------------------------------------ | | 前置條件 | 獲取物件的監視器鎖 | 呼叫 Lock.lock() 獲取鎖呼叫 Lock.newCondition() 獲取 Condition 物件 | | 呼叫方法 | 直接呼叫如:object.wait() | 直接呼叫如:condition.await() | | 等待佇列個數 | 一個 | 多個 | | 當前執行緒釋放鎖並進入等待佇列 | 支援 | 支援 | | 當前執行緒釋放鎖並進入等待佇列,在等待狀態中不響應中斷 | 不支援 | 支援 | | 當前執行緒釋放鎖並進入超時等待狀態 | 支援 | 支援 | | 當前執行緒釋放鎖並進入等待狀態到將來的某個時間 | 不支援 | 支援 | | 喚醒等待佇列中的一個執行緒 | 支援 | 支援 | | 喚醒等待佇列中的全部執行緒 | 支援 | 支援 |