Java中的阻塞隊列(3)同步計數(shù)器

9竭沫、同步計數(shù)器 CountDownLatch

? ? 這是一個同步的輔助類拣播,實(shí)現(xiàn)原理為AbstractQueuedSynchronizer抽象隊列化同步器

圖9-1

? ? 方法介紹:

? ? ? ? 1糟描、CountDownLatch(int count):構(gòu)造削葱,并給定計數(shù)初始化

? ? ? ? 2亿汞、await():當(dāng)前線程在鎖存器倒計數(shù)到零之前一直等待羔沙,除非線程被中斷

? ? ? ? 3、await(long, TimeUnit):當(dāng)前線程在鎖存器倒計數(shù)到零之前一直等待伟骨,除非線程被中斷或者超出指定時間

? ? ? ? 4饮潦、countDown():計數(shù)減一

? ? ? ? 5、getCount():獲取當(dāng)前計數(shù)

? ? 至于例子携狭,就通過之前寫過的并發(fā)單元測試歷程就可以

圖9-2

? ? 至于實(shí)現(xiàn)原理继蜡,我們看源碼會發(fā)現(xiàn),其實(shí)CountDownLatch也是調(diào)用了一個AbstractQueuedSynchronizer抽象隊列化同步器

10逛腿、AbstractQueuedSynchronizer抽象隊列化同步器

? ? 這是一個java.util.concurrent的核心組件之一稀并,提供了一個基于FIFO的隊列,用于構(gòu)建鎖或者其他相關(guān)同步裝置的基礎(chǔ)框架

? ? 首先看繼承結(jié)構(gòu)如圖10-1

圖10-1

這個繼承結(jié)構(gòu)是非常簡單的单默,但是里面包含的方法就 emmmmmmm碘举。。搁廓。有點(diǎn)多了引颈,而且這是一個抽象類,但是里面卻找不到任何一個抽象方法境蜕,想要使用就需要繼承這個類才行蝙场,AbstractQueuedSynchronizer分為兩種模式,排他模式和共享模式粱年,也可以兩個模式共存售滤,排他模式時其他線程試圖獲取該鎖將無法取得成功,共享模式則可以同時成功台诗。

? ? 其中的方法子類可以適當(dāng)?shù)闹匦露x:

? ? ? ? 1完箩、tryAcquire(int)、tryRelease(int):試圖在排他模式下獲壤/銷毀對象狀態(tài)

? ? ? ? 2嗜憔、tryAcquireShared(int)、tryReleaseShared(int):試圖在排他模式下獲仁险獭/銷毀對象狀態(tài)

? ? ? ? 3吉捶、isHeldExclusively():如果對于當(dāng)前正在調(diào)用的線程夺鲜,同步是以排他方式進(jìn)行的,則返回true呐舔,判斷當(dāng)前正在執(zhí)行的線程是否以排他模式進(jìn)行的

? ? ? ? 4币励、getState()、setState(int)珊拼、compareAndSetState(int, int):通過這種方式來改變同步狀態(tài)

? ? 我們這邊提取一個官方的demo食呻,加以說明一下

? ? ? ? 以下為Lock對象的實(shí)現(xiàn)方法

普通重入鎖的執(zhí)行過程

11、同步計數(shù)器Semaphore:

? ? 這個其實(shí)就是維護(hù)了一個許可集合澎现,其實(shí)就是在高并發(fā)下仅胞,允許幾個線程同時運(yùn)行,其余線程放入隊列剑辫,具體的應(yīng)用場景就是線程池干旧,這個放在后面說明。

? ? 實(shí)現(xiàn)原理其實(shí)也很簡單妹蔽,底層也是通過AQS的方式椎眯,

12、同步計數(shù)器CyclicBarrier

? ? 這個需要對比著CountDownLatch來看

? ??CountDownLatch:一個線程(或者多個線程)胳岂,等待另外n個線程完成某個事情之后才能執(zhí)行

? ??CyclicBarrier:n個線程互相等待编整,任何一個線程完成之前,其他的線程都必須等待

? ? 來看一個例子

? ? 可以看到乳丰,三個子線程先執(zhí)行掌测,一直到三個線程都await的時候,主線程開始執(zhí)行产园,主線程執(zhí)行完畢之后赏半,三個線程開始執(zhí)行await后面的任務(wù)。

? ? 至于源碼的解讀淆两。。拂酣。秋冰。。婶熬。剑勾。還是算了吧。赵颅。虽另。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饺谬,隨后出現(xiàn)的幾起案子捂刺,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件族展,死亡現(xiàn)場離奇詭異森缠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仪缸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門贵涵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恰画,你說我怎么就攤上這事宾茂。” “怎么了拴还?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵跨晴,是天一觀的道長。 經(jīng)常有香客問我自沧,道長坟奥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任拇厢,我火速辦了婚禮爱谁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孝偎。我一直安慰自己访敌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布衣盾。 她就那樣靜靜地躺著寺旺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪势决。 梳的紋絲不亂的頭發(fā)上阻塑,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機(jī)與錄音果复,去河邊找鬼陈莽。 笑死,一個胖子當(dāng)著我的面吹牛虽抄,可吹牛的內(nèi)容都是我干的走搁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艘蹋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤曲稼,失蹤者是張志新(化名)和其女友劉穎索绪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躯肌,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡者春,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了清女。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钱烟。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嫡丙,靈堂內(nèi)的尸體忽然破棺而出拴袭,到底是詐尸還是另有隱情,我是刑警寧澤曙博,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布拥刻,位于F島的核電站,受9級特大地震影響父泳,放射性物質(zhì)發(fā)生泄漏般哼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一惠窄、第九天 我趴在偏房一處隱蔽的房頂上張望蒸眠。 院中可真熱鬧,春花似錦杆融、人聲如沸楞卡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋腮。三九已至,卻和暖如春藕各,著一層夾襖步出監(jiān)牢的瞬間池摧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工激况, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留险绘,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓誉碴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓣距。 傳聞我的和親對象是個殘疾皇子黔帕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容