condition結構提供了基本方法如下:
void await() throwsinterruptedexception;
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();
publicclass reenterlockcondition implements
runnable
catch
(interruptedexception e)
finally
}public
static
void main(string args) throws
interruptedexception
}
當執行緒使用condition.await()時,要求執行緒持有相關的重入鎖,在condition.await()呼叫後,這個執行緒會釋放這把鎖,同理 在condition.signal()方法呼叫時,也要求執行緒先獲得相關的鎖,在signal()方法呼叫後,西永會從當前的condition物件的等待佇列中,喚醒乙個執行緒,.一旦執行緒被喚醒,他會重新嘗試獲得與之繫結的重入鎖,一旦成功獲取,就可以繼續執行,因此,在signal()方法呼叫後,一般需要釋放相關的鎖.
put()的實現如下:
publicvoid put(e e) throws
interruptedexception
enqueue(node);
//插入資料
c = count.getandincrement();//
更新總數,變數c是count加1前的值
if (c + 1 notfull.signal();
//有足夠的空間,通知其他執行緒
} finally
if (c == 0)
signalnotempty();
//插入成功後,通知take操作去資料
}
通過takelock和putlock兩把鎖,linkedblockingqueue實現了取資料和寫資料的分離,使兩者在真正意義上成為可以併發的操作
效能的優化是根據執行時的真實情況對各個資源點進行權衡折中的過程,鎖粗化的思想和減少鎖的持有時間是相反的,但在不同的場合,他們的效果並不相同.所有大家需要根據實際情況,進行權衡.
樹莓派的C語言開發好搭檔WiringPi庫
一 準備工作 1 3b開發板一塊,通電,連線上家裡的無線網路。2 開啟vnc軟體,連線上開發板。二 wiringpi介紹 wiringpi是應用於樹莓派平台的gpio控制庫函式,wiringpi遵守gun lv3。wiringpi使用c或者c 開發並且可以被其他語言包轉,例如python ruby或...
synchronized 鎖的重入
1 乙個同步方法呼叫另外乙個同步方法,能否得到鎖?重入 synchronized預設支援重入 slf4j topic test public class demo catch interruptedexception e test2 為什麼test2還需要加sync 他本身就包含在test1 而te...
在家看電影的最好「搭檔」 神驚小龍蝦
小夥伴們!愛情公寓大電影在近日上映啦!相比於陪我們長大的這種情懷,小編個人還是更加程式設計客棧覺得鍾情於張偉無法自拔!我喜歡他深邃的眼眸,以及 迷人的香腸嘴!沒錯!就是這個為了兄弟和小龍蝦較勁的男人,讓我從此走上了迷戀小龍蝦的不歸路。所謂,民以食為天,自從吃了小龍蝦後,我才發現,我以前的天空多麼的狹...