Condition簡(jiǎn)介
Condition 將 Object 監(jiān)視器方法(wait混弥、notify 和 notifyAll)分解成截然不同的對(duì)象紧索,以便通過將這些對(duì)象與任意 Lock 實(shí)現(xiàn)組合使用伪节,為每個(gè)對(duì)象提供多個(gè)等待 set(wait-set)颜骤。其中,Lock 替代了 synchronized 方法和語句的使用困檩,Condition 替代了 Object 監(jiān)視器方法的使用腰埂。
條件(也稱為條件隊(duì)列 或條件變量)為線程提供了一個(gè)含義飒焦,以便在某個(gè)狀態(tài)條件現(xiàn)在可能為 true 的另一個(gè)線程通知它之前,一直掛起該線程(即讓其“等待”)屿笼。因?yàn)樵L問此共享狀態(tài)信息發(fā)生在不同的線程中牺荠,所以它必須受保護(hù),因此要將某種形式的鎖與該條件相關(guān)聯(lián)驴一。等待提供一個(gè)條件的主要屬性是:以原子方式 釋放相關(guān)的鎖休雌,并掛起當(dāng)前線程,就像 Object.wait 做的那樣肝断。
Condition 實(shí)例實(shí)質(zhì)上被綁定到一個(gè)鎖上杈曲。要為特定 Lock 實(shí)例獲得 Condition 實(shí)例,請(qǐng)使用其 newCondition() 方法胸懈。
接口
public interface Condition {
void await() throws InterruptedException;
void awaitUninterruptibly();
long awaitNanos(long nanosTimeout) throws InterruptedException;
boolean await(long time, TimeUnit unit) throws InterruptedException;
boolean awaitUntil(Date deadline) throws InterruptedException;
void signal();
void signalAll();
}