Condition的介紹與使用

2021-09-25 02:52:33 字數 1053 閱讀 5596

condition是lock對應synchronize的wait,notify等執行緒互相作用時而使用的等待通知機制,condition有著比synchronize更加靈活的用法,實現的功能也更多,通俗的可以說是synchronize只用乙個condition,而lock可以使用多個condition來進行互相的通知,比如下面的例子可以看出condition的簡單使用

void await()    

boolean await(long time, timeunit unit)    

signal()   

signalall()   

不用多說,直接看**

public class lockconditiontest extends thread

public void signalother()

@override

public void run() catch (interruptedexception e)

system.out.println(system.currenttimemillis()+this.name+"醒了");

lock.unlock();}}

public class testmain 

}

執行結果

可以看到同乙個condition是可以互相通知的,如果是不同的則不行

修改一下主函式,現在給他們不同的condition

public static void main(string args) throws interruptedexception 

lct1.signalother();//自己來喚醒自己吧

從結果可以看出,不同的condition是不能互相作用的

Lock和Condition物件的使用

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

使用Condition實現多路等待通知

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

gdb斷點(六)condition 與ignore

如果為乙個斷點設定乙個條件,每當程式到達這個斷點的時候都會去判斷是否為true,只有條件為true時才會在斷點出停下。斷點條件的除錯方式與斷點斷言的除錯方式邏輯是想反的,assert是當條件為false時停止,所一如果在條件調中用斷言的話應該是 condition assert exp 斷點的條件除...