使用Condition實現多路等待通知

2021-09-01 08:20:28 字數 790 閱讀 6050

乙個鎖內部可以有多個condition,即有多路等待和通知,可參考jdk1.5的lock和condition實現的可阻塞佇列的應用案例,在傳統的執行緒機制中乙個監視器物件上只能有一路等待和通知,要想實現多路等待和通知,必須巢狀使用多個同步監視器物件.

使用condition可簡單實現多路等待通知

public class twoconditioncommunication 

}}).start();

for (int i = 1; i <= 50; i++)

} static class business catch (exception e)

}for (int j = 1; j <= 10; j++)

shouldsub = false;

condition_main.signal();

} finally

} public void main(int i) catch (exception e)

}for (int j = 1; j <= 20; j++)

shouldsub = true;

condition_sub.signal();

} finally

} }}

附jdk1.5中demo

class boundedbuffer  finally 

}public object take() throws interruptedexception finally

} }

深度解析 Condition實現原理

condition指的就是conditionobject,是aqs的乙個內部類。conditionobject的原理是基於aqs的node內部類維護了兩個佇列,乙個等待佇列,乙個同步佇列 乙個是單向佇列,乙個是雙向佇列。如果某個執行緒呼叫了await方法之後,就會使當前執行緒進入到等待狀態,原理就是...

Condition的介紹與使用

condition是lock對應synchronize的wait,notify等執行緒互相作用時而使用的等待通知機制,condition有著比synchronize更加靈活的用法,實現的功能也更多,通俗的可以說是synchronize只用乙個condition,而lock可以使用多個conditio...

Lock和Condition物件的使用

condition的await 方法 void await throws interruptedexception導致當前執行緒等到發訊號或interrupted 在所有情況下,在此方法返回之前,當前執行緒必須重新獲取與此條件相關的鎖。當執行緒返回時,它保證保持此鎖。實現兩個執行緒交替執行的案例 c...