CountDownLatch使用

之前開(kāi)發(fā)遇到一個(gè)場(chǎng)景,需要開(kāi)啟多線程上傳圖片到阿里云,將所以圖片上傳完成后柱蟀,將圖片地址一起提交到后端。那么這里就需要監(jiān)聽(tīng)這些多線程是否所有都執(zhí)行完成蚜厉。之前做的是用AtomicInteger來(lái)計(jì)數(shù)长已,每執(zhí)行完一個(gè)線程,將這個(gè)變量+1弯囊,然后判斷該值是否等于啟動(dòng)的線程數(shù)痰哨,如果相等了,則表明所有線程執(zhí)行完畢匾嘱。那么這種場(chǎng)景還可以直接用CountDownLatch來(lái)進(jìn)行實(shí)現(xiàn)斤斧。

CountDownLatch是一個(gè)同步工具類,它通過(guò)一個(gè)計(jì)數(shù)器來(lái)實(shí)現(xiàn)的,初始值為線程的數(shù)量霎烙。每當(dāng)一個(gè)線程完成了自己的任務(wù),計(jì)數(shù)器的值就相應(yīng)得減1撬讽。當(dāng)計(jì)數(shù)器到達(dá)0時(shí),表示所有的線程都已執(zhí)行完畢,然后在等待的線程就可以恢復(fù)執(zhí)行任務(wù)蕊连。

方法詳解

CountDownLatch(int count):count為計(jì)數(shù)器的初始值(一般需要多少個(gè)線程執(zhí)行,count就設(shè)為幾)游昼。
countDown(): 每調(diào)用一次計(jì)數(shù)器值-1甘苍,直到count被減為0,代表所有線程全部執(zhí)行完畢烘豌。
getCount():獲取當(dāng)前計(jì)數(shù)器的值载庭。
await(): 等待計(jì)數(shù)器變?yōu)?,即等待所有異步線程執(zhí)行完畢廊佩。

CountDownLatch的使用場(chǎng)景

1.某一線程在開(kāi)始運(yùn)行前等待n個(gè)線程執(zhí)行完畢囚聚。
2.實(shí)現(xiàn)多個(gè)線程開(kāi)始執(zhí)行任務(wù)的最大并行性。

實(shí)例:業(yè)務(wù)線程等待子線程初始化執(zhí)行完成再執(zhí)行
public class CountDownLatchUtil {

    private static CountDownLatch countDownLatch = new CountDownLatch(6);

    public static void main(String args[]) {
        for (int i=0;i<5;i++) {
            Thread thread = new Thread(new InitThread());
            thread.start();
        }

        Thread thread = new Thread(new BusiThread());
        thread.start();
    }

    private static class InitThread implements Runnable {

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + ":執(zhí)行初始化任務(wù)");
            countDownLatch.countDown();
        }
    }

    private static class BusiThread implements Runnable {

        @Override
        public void run() {
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("BusiThread" + "執(zhí)行業(yè)務(wù)任務(wù)");
        }
    }
}

創(chuàng)建5個(gè)子線程執(zhí)行run标锄,run方法中調(diào)用countDown方法進(jìn)行計(jì)數(shù)-1顽铸。同時(shí)創(chuàng)建BusiThread任務(wù),在run中調(diào)用await料皇,等待計(jì)數(shù)為0谓松,再執(zhí)行自己的業(yè)務(wù)任務(wù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末践剂,一起剝皮案震驚了整個(gè)濱河市鬼譬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逊脯,老刑警劉巖拧簸,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異男窟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贾富,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門歉眷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颤枪,你說(shuō)我怎么就攤上這事汗捡。” “怎么了畏纲?”我有些...
    開(kāi)封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵扇住,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我盗胀,道長(zhǎng)艘蹋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任票灰,我火速辦了婚禮女阀,結(jié)果婚禮上宅荤,老公的妹妹穿的比我還像新娘。我一直安慰自己浸策,他們只是感情好冯键,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著庸汗,像睡著了一般惫确。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚯舱,一...
    開(kāi)封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天改化,我揣著相機(jī)與錄音,去河邊找鬼晓淀。 笑死所袁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凶掰。 我是一名探鬼主播燥爷,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼懦窘!你這毒婦竟也來(lái)了前翎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畅涂,失蹤者是張志新(化名)和其女友劉穎港华,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體午衰,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡立宜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臊岸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橙数。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帅戒,靈堂內(nèi)的尸體忽然破棺而出灯帮,到底是詐尸還是另有隱情,我是刑警寧澤逻住,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布钟哥,位于F島的核電站,受9級(jí)特大地震影響瞎访,放射性物質(zhì)發(fā)生泄漏腻贰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一装诡、第九天 我趴在偏房一處隱蔽的房頂上張望银受。 院中可真熱鬧践盼,春花似錦、人聲如沸宾巍。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顶霞。三九已至肄程,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間选浑,已是汗流浹背蓝厌。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留古徒,地道東北人拓提。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像隧膘,于是被迫代替她去往敵國(guó)和親代态。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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

  • 一疹吃、概念 CountDownLatch可以使一個(gè)或多個(gè)線程等待其他線程各自執(zhí)行完畢后再執(zhí)行蹦疑。 CountDownL...
    AC編程閱讀 9,566評(píng)論 4 11
  • CountDownLatch類位于java.util.concurrent包下,利用它可以實(shí)現(xiàn)類似計(jì)數(shù)器的功能萨驶。比...
    激情的狼王閱讀 721評(píng)論 0 0
  • java并發(fā)中CountDownLatch的使用 在java并發(fā)中歉摧,控制共享變量的訪問(wèn)非常重要,有時(shí)候我們也想控制...
    flydean程序那些事閱讀 62評(píng)論 0 1
  • CountDownLatch作用阻塞一個(gè)或多個(gè)線程等待其他線程完成操作腔呜。 定義初始化的時(shí)候叁温,需要傳入一個(gè)正數(shù)來(lái)初始...
    YanLG閱讀 243評(píng)論 0 1
  • CountDownLatch:線程計(jì)數(shù)器,等待其他線程完成核畴,再執(zhí)行主線程 常用方法: 應(yīng)用場(chǎng)景 當(dāng)我們要做一個(gè)2W...
    傳說(shuō)中的大哥閱讀 667評(píng)論 0 0