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 斷點的條件除...