線程同步輔助類(一)

? ? ? ?java中基本的同步機制有synchronized,Lock等,這些機制可以實現(xiàn)并發(fā)任務(wù)共享一個資源時的同步操作烛愧。當(dāng)實現(xiàn)一些較為復(fù)雜的并發(fā)任務(wù)時,可以使用一些同步輔助類來簡化操作伤哺。

? ? ? 本節(jié)將介紹信號量(Semaphore)纸巷,CountDownLatch輔助類。

? ? ? 信號量是一種計數(shù)器厉萝,用來保護一個或多個共享資源的訪問恍飘。它是并發(fā)編程的一種基礎(chǔ)工具,大多數(shù)編程語言都提供了這種機制谴垫。

? ? ? CountDownLatch在完成一組正在其他線程中執(zhí)行的操作之前章母,它允許線程一直等待。


1.Semaphore:

如果線程要訪問一個共享資源翩剪,必須先獲得信號量乳怎,信號量就是一個計數(shù)器,如果這個計數(shù)器為0前弯,則代表這個線程將一只等待下去舞肆,直到計數(shù)器大于0,因為此時沒有多余的資源可以使用博杖。計數(shù)器大于0時椿胯,代表當(dāng)前線程可以進行共享資源的訪問,有可以使用的資源剃根,因此線程將允許使用其中的一個資源哩盲。

? ? ? 當(dāng)線程使用完某個計數(shù)器之后必須釋放信號量,將計數(shù)器加1,以用來為其他線程提供多余的資源使用廉油。否則信號量將不會被釋放惠险,也就時共享資源不會被其他線程再訪問。

semaphore.acquire() ?獲取資源抒线,即有訪問權(quán)限班巩,計數(shù)器減1.

semaphore.release() ?釋放資源,即訪問結(jié)束時釋放嘶炭,計數(shù)器+1.

用來多個任務(wù)同時獲取某類資源時進行同步訪問抱慌,比如說有100份文檔,3臺打印機眨猎,讓三臺打印機輪流工作去進行打印抑进,要防止文檔出現(xiàn)混亂打印,就要同步地進行打印操作睡陪。每一個文檔要用acquire()來獲取資源寺渗,可以進行打印操作,阻止了其他文檔的搶打兰迫。當(dāng)文檔打印完成后信殊,調(diào)用release()釋放資源,每個文檔要監(jiān)聽3個打印機的狀態(tài)汁果,當(dāng)有空閑的打印機時涡拘,立馬獲取資源進行打印。

2.CountDownLatch

也類似于一個計數(shù)器须鼎,當(dāng)一個線程鲸伴,要等待其他一個或者線程的一個或多個操作完成后再進行后續(xù)操作府蔗,可以使用CountDownLatch類晋控,等待操作使用await() 方法,來進行等待監(jiān)聽姓赤。當(dāng)其他線程完成一一組操作赡译,調(diào)用countDown()方法,來通知等待線程它已經(jīng)完成不铆,此時計數(shù)器-1蝌焚。當(dāng)計數(shù)器為0的時候,await()等待結(jié)束誓斥,執(zhí)行后續(xù)操作只洒。

比如說一個簽到會議系統(tǒng),要等待所有人都到來才能開始會議劳坑,簽到系統(tǒng)是一個線程毕谴,其他的人各自是一個線程,當(dāng)會議準(zhǔn)備好了,進行等待參與者簽到時涝开,調(diào)用await()方法循帐,后面跟上后續(xù)操作。參與者簽到這個動作是提醒了會議系統(tǒng)“我來了”舀武,調(diào)用countDown()方法拄养,計數(shù)器-1,當(dāng)所有人(或者說會議的最大人數(shù))都來到時银舱,計數(shù)器為0瘪匿,此時簽到系統(tǒng)從等待狀態(tài)變?yōu)殚_始狀態(tài),可以開始開會啦纵朋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柿顶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子操软,更是在濱河造成了極大的恐慌嘁锯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聂薪,死亡現(xiàn)場離奇詭異家乘,居然都是意外死亡,警方通過查閱死者的電腦和手機藏澳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門仁锯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翔悠,你說我怎么就攤上這事业崖。” “怎么了蓄愁?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵双炕,是天一觀的道長。 經(jīng)常有香客問我撮抓,道長妇斤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任丹拯,我火速辦了婚禮站超,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乖酬。我一直安慰自己死相,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布咬像。 她就那樣靜靜地躺著算撮,像睡著了一般双肤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钮惠,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天茅糜,我揣著相機與錄音,去河邊找鬼素挽。 笑死蔑赘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的预明。 我是一名探鬼主播缩赛,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撰糠!你這毒婦竟也來了酥馍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阅酪,失蹤者是張志新(化名)和其女友劉穎旨袒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體术辐,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡砚尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辉词。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片必孤。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瑞躺,靈堂內(nèi)的尸體忽然破棺而出敷搪,到底是詐尸還是另有隱情,我是刑警寧澤幢哨,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布赡勘,位于F島的核電站,受9級特大地震影響嘱么,放射性物質(zhì)發(fā)生泄漏狮含。R本人自食惡果不足惜顽悼,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一曼振、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔚龙,春花似錦冰评、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽解孙。三九已至,卻和暖如春抛人,著一層夾襖步出監(jiān)牢的瞬間弛姜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工妖枚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廷臼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓绝页,卻偏偏與公主長得像荠商,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子续誉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,442評論 2 359

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

  • 正如每個Java文檔所描述的那樣莱没,CountDownLatch是一個同步工具類,它允許一個或多個線程一直等待酷鸦,直到...
    霽暖閣閱讀 1,093評論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理饰躲,服務(wù)發(fā)現(xiàn),斷路器臼隔,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 下面是我自己收集整理的Java線程相關(guān)的面試題属铁,可以用它來好好準(zhǔn)備面試。 參考文檔:-《Java核心技術(shù) 卷一》-...
    阿呆變Geek閱讀 14,857評論 14 507
  • Java-Review-Note——4.多線程 標(biāo)簽: JavaStudy PS:本來是分開三篇的躬翁,后來想想還是整...
    coder_pig閱讀 1,655評論 2 17
  • 你高估了你在我心目中的位置盒发。有時候不小心知道了一些事例嘱,才發(fā)現(xiàn)自己所在乎的事是多么可笑。 1. 小楠宁舰,以前是我的同事...
    艷偉閱讀 850評論 12 11