理解CountDownLatch

1. CountDownLatch是什么

CountDownLatch是一個同步工具類,它允許一個或多個線程一直等待撵渡,直到其他線程的操作執(zhí)行完后再執(zhí)行
融柬,必要時可以對各個任務的執(zhí)行結(jié)果進行匯總,然后主線程才繼續(xù)往下執(zhí)行趋距。常被用在多線程環(huán)境下粒氧,它在初始時需要指定一個計數(shù)器的大小,然后可被多個線程并發(fā)的實現(xiàn)減 1 操作节腐,并在計數(shù)器為 0 后調(diào)用 await 方法的線程被喚醒外盯,從而實現(xiàn)多線程間的協(xié)作

2 適用場景

CountDownLatch非常適合于對任務進行拆分,使其并行執(zhí)行翼雀,比如某個任務執(zhí)行2s饱苟,其對數(shù)據(jù)的請求可以分為五個部分狼渊,那么就可以將這個任務拆分為5個子任務狈邑,分別交由五個線程執(zhí)行,執(zhí)行完成之后再由主線程進行匯總糕伐,此時蘸嘶,總的執(zhí)行時間將決定于執(zhí)行最慢的任務训唱,平均來看,還是大大減少了總的執(zhí)行時間遵岩。
另外一種比較合適使用CountDownLatch的地方是使用某些外部鏈接請求數(shù)據(jù)的時候,比如圖片宴凉。在本人所從事的項目中就有類似的情況表悬,因為我們使用的圖片服務只提供了獲取單個圖片的功能,而每次獲取圖片的時間不等籽暇,一般都需要1.5s~2s。當我們需要批量獲取圖片的時候熬荆,比如列表頁需要展示一系列的圖片绸狐,如果使用單個線程順序獲取,那么等待時間將會極長寒矿,此時我們就可以使用CountDownLatch對獲取圖片的操作進行拆分,并行的獲取圖片拆融,這樣也就縮短了總的獲取時間

3 原理

采用AQS實現(xiàn)啊终,參見https://www.infoq.cn/article/java8-abstractqueuedsynchronizer/

4 應用實列

    static CountDownLatch c = new CountDownLatch(3);
    public static void main(String[] args) throws InterruptedException {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(1);
                c.countDown();
                System.out.println(2);
                c.countDown();
            }

        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(3);
                c.countDown();
            }

        }).start();
        c.await();
        System.out.println("over");
    }

調(diào)用一次CountDownLatch的countDown方法時孕索,N就會減1搞旭,CountDownLatch的await會阻塞當前線程,直到N變成零镇眷。由于countDown方法可以用在任何地方欠动,所以這里說的N個點具伍,可以是N個線程圈驼,也可以是1個線程里的N個執(zhí)行步驟绩脆。用在多個線程時橄抹,你只需要把這個CountDownLatch的引用傳遞到線程

5 總結(jié)

  • CountDownLatch 可以用Thread.join 實現(xiàn)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惕味,一起剝皮案震驚了整個濱河市楼誓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疟羹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阁猜,死亡現(xiàn)場離奇詭異,居然都是意外死亡蹋艺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門捎谨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來民效,“玉大人,你說我怎么就攤上這事涛救∥沸希” “怎么了检吆?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵蹭沛,是天一觀的道長。 經(jīng)常有香客問我,道長掏缎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任眷蜈,我火速辦了婚禮端蛆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酥泛。我一直安慰自己今豆,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布柔袁。 她就那樣靜靜地躺著呆躲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捶索。 梳的紋絲不亂的頭發(fā)上插掂,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音腥例,去河邊找鬼辅甥。 笑死,一個胖子當著我的面吹牛燎竖,可吹牛的內(nèi)容都是我干的璃弄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼构回,長吁一口氣:“原來是場噩夢啊……” “哼夏块!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纤掸,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脐供,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后借跪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體政己,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年掏愁,在試婚紗的時候發(fā)現(xiàn)自己被綠了歇由。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡托猩,死狀恐怖印蓖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情京腥,我是刑警寧澤赦肃,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站公浪,受9級特大地震影響他宛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欠气,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一厅各、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧预柒,春花似錦队塘、人聲如沸袁梗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遮怜。三九已至,卻和暖如春鸿市,著一層夾襖步出監(jiān)牢的瞬間锯梁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工焰情, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陌凳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓内舟,卻偏偏與公主長得像合敦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谒获,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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