Chapter 8 Java中的并發(fā)工具類(lèi)

8.1 等待多線程完成的CountDownLatch

CountDownLatch允許一個(gè)或多個(gè)線程等待其他線程完成操作共屈。

CountDownLatch的構(gòu)造器接受一個(gè)int類(lèi)型的參數(shù)作為計(jì)數(shù)器细诸,如果你想等待N個(gè)點(diǎn)完成棺滞,這里就傳入N匀哄。

當(dāng)調(diào)用countDown()方法時(shí)大咱,N就會(huì)減1,CountDownLatch的await()方法會(huì)阻塞當(dāng)前線程咆霜,直到N變成0。


8.2 同步屏障CyclicBarrier

CyclicBarrier的字面意思是可循環(huán)使用的(Cyclic)的屏障(Barrier)嘶朱。讓一組線程到達(dá)一個(gè)屏障(也叫做同步點(diǎn))時(shí)被阻塞蛾坯,直到最后一個(gè)線程到達(dá)同步點(diǎn)才會(huì)開(kāi)門(mén),所有被阻塞的線程重新開(kāi)始運(yùn)行疏遏。

CyclicBarrier

CyclicBarrier的默認(rèn)構(gòu)造器其參數(shù)表示屏障攔截的線程數(shù)量脉课,每個(gè)線程調(diào)用await方法告訴CyclicBarrier我已經(jīng)到達(dá)了屏障,然后線程被阻塞财异,知道最后一個(gè)線程到達(dá)時(shí)被喚醒倘零。

CyclicBarrier與CountDownLatch的區(qū)別:CountDownLatch的計(jì)數(shù)器只能使用一次,而CyclicBarrier的計(jì)數(shù)器可以使用reset()方法重置戳寸。所以CyclicBarrier可以處理更為復(fù)雜的業(yè)務(wù)場(chǎng)景呈驶。例如,如果計(jì)算發(fā)生錯(cuò)誤疫鹊,可以重置計(jì)數(shù)器袖瞻,并讓線程重新計(jì)算。

CyclicBarrier還提供了其他有用的方法订晌。例如getNumberWaiting()獲得被阻塞的線程的數(shù)量。isBoken()方法來(lái)了解被阻塞的線程是否被中斷蚌吸。


8.3 控制并發(fā)線程數(shù)的Semaphore

Semaphore(信號(hào)量)用來(lái)控制同時(shí)訪問(wèn)特定資源的線程數(shù)量锈拨,它通過(guò)協(xié)調(diào)各個(gè)線程,以保證合理的使用公共資源羹唠。

Semaphore可以用作流量控制奕枢,特別是公共資源有限的應(yīng)用場(chǎng)景。比如有一個(gè)需求佩微,要讀取幾萬(wàn)個(gè)文件的數(shù)據(jù)缝彬,因?yàn)槎际荌O密集型任務(wù),我們可以啟動(dòng)及時(shí)個(gè)線程并發(fā)的讀取哺眯。但是讀入內(nèi)存后谷浅,要存儲(chǔ)到數(shù)據(jù)庫(kù)中,而數(shù)據(jù)庫(kù)連接只有10個(gè)奶卓,這時(shí)我們必須控制只有10個(gè)線程可以同時(shí)獲取到數(shù)據(jù)庫(kù)連接保存數(shù)據(jù)一疯。

Semaphore

Semaphore還提供了一些其他方法:

(1)int availablePermits():返回此信號(hào)量中當(dāng)前可用的許可證數(shù)量。

(2)int getQueueLength():返回正在等待獲取許可證的線程數(shù)量夺姑。


8.4 線程間交換數(shù)據(jù)的Exchanger

Exchanger用于線程間的數(shù)據(jù)交換墩邀。它通過(guò)一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn)盏浙,兩個(gè)線程可以交換彼此的數(shù)據(jù)眉睹。這兩個(gè)線程通過(guò)exchange()方法交換數(shù)據(jù)荔茬,如果第一個(gè)線程先執(zhí)行exchange()方法,它會(huì)一直等待第二個(gè)線程也執(zhí)行exchange()方法竹海,當(dāng)兩個(gè)線程都到達(dá)同步點(diǎn)時(shí)慕蔚,這兩個(gè)線程 就可以交換數(shù)據(jù),將本線程生產(chǎn)出來(lái)的數(shù)據(jù)傳遞給對(duì)方站削。

Exchanger

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坊萝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子许起,更是在濱河造成了極大的恐慌十偶,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件园细,死亡現(xiàn)場(chǎng)離奇詭異惦积,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)猛频,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)狮崩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鹿寻,你說(shuō)我怎么就攤上這事睦柴。” “怎么了毡熏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵坦敌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我痢法,道長(zhǎng)狱窘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任财搁,我火速辦了婚禮蘸炸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尖奔。我一直安慰自己搭儒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布提茁。 她就那樣靜靜地躺著仗嗦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甘凭。 梳的紋絲不亂的頭發(fā)上稀拐,一...
    開(kāi)封第一講書(shū)人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音丹弱,去河邊找鬼德撬。 笑死铲咨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜓洪。 我是一名探鬼主播纤勒,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼隆檀!你這毒婦竟也來(lái)了摇天?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恐仑,失蹤者是張志新(化名)和其女友劉穎泉坐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體裳仆,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腕让,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歧斟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纯丸。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖静袖,靈堂內(nèi)的尸體忽然破棺而出觉鼻,到底是詐尸還是另有隱情,我是刑警寧澤队橙,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布坠陈,位于F島的核電站,受9級(jí)特大地震影響喘帚,放射性物質(zhì)發(fā)生泄漏畅姊。R本人自食惡果不足惜咒钟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一吹由、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朱嘴,春花似錦倾鲫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至壤追,卻和暖如春磕道,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背行冰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工溺蕉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伶丐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓疯特,卻偏偏與公主長(zhǎng)得像哗魂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漓雅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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