線程CountDownLatch使用

CountDownLatch:線程計(jì)數(shù)器,等待其他線程完成,再執(zhí)行主線程

CountDownLatch latch = new CountDownLatch(2);//聲明一個(gè)CountDownLatch,計(jì)數(shù)器為2

常用方法:

method description
await() 線程被掛起,它會(huì)等待直到count值為0才繼續(xù)執(zhí)行
await(long timeout, TimeUnit unit) 線程被掛起,設(shè)置超時(shí)時(shí)間,如果到了超時(shí)時(shí)間count還不為0,則將會(huì)繼續(xù)向下執(zhí)行,執(zhí)行主線程
countDown() 講count計(jì)數(shù)器做減1操作

應(yīng)用場(chǎng)景

當(dāng)我們要做一個(gè)2W條的查詢,如果單線程運(yùn)行等待的時(shí)間會(huì)非常久,這時(shí)我們可以考慮運(yùn)行2個(gè)子線線程并行查詢,每個(gè)子線程查詢1W條數(shù)據(jù),等子線程查詢都結(jié)束后,再交由主線程進(jìn)行匯總處理。

代碼如下:

import java.util.concurrent.CountDownLatch;

/**
 * 線程計(jì)數(shù)器,等待其他線程完成,再執(zhí)行主線程,例:并發(fā)查詢
 */
public class CountDownLatchTest {
    public static void main(String[] args) throws InterruptedException {
        final int threadSize = 2;
        CountDownLatch latch = new CountDownLatch(threadSize);
        for (int i =1;i<=threadSize;i++){
            final int x =i;
            new Thread(()->{
                System.out.println("第"+x+"個(gè)線程查詢,正在運(yùn)行");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("第"+x+"個(gè)線程查詢,運(yùn)行完畢");
                latch.countDown();
            }).start();
        }
        System.out.println("等待所有查詢查詢完畢");
        latch.await();
        System.out.println("所有查詢查詢完畢");
        System.out.println("繼續(xù)執(zhí)行主線程匯總。。。。。。。");
    }
}

執(zhí)行結(jié)果

等待所有查詢查詢完畢
第1個(gè)線程查詢,正在運(yùn)行
第2個(gè)線程查詢,正在運(yùn)行
第1個(gè)線程查詢,運(yùn)行完畢
第2個(gè)線程查詢,運(yùn)行完畢
所有查詢查詢完畢
繼續(xù)執(zhí)行主線程匯總。。。。。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 11,589評(píng)論 4 56
  • 下面是我自己收集整理的Java線程相關(guān)的面試題,可以用它來好好準(zhǔn)備面試。 參考文檔:-《Java核心技術(shù) 卷一》-...
    阿呆變Geek閱讀 15,120評(píng)論 14 507
  • Java繼承關(guān)系初始化順序 父類的靜態(tài)變量-->父類的靜態(tài)代碼塊-->子類的靜態(tài)變量-->子類的靜態(tài)代碼快-->父...
    第六象限閱讀 2,247評(píng)論 0 9
  • 我心目中的好老師應(yīng)該是一位和藹可親的,對(duì)孩子嚴(yán)厲的,不亂發(fā)脾氣的,不放棄任何學(xué)生的好老師。
    一明媽媽_9a5a閱讀 222評(píng)論 0 0
  • 外婆,你的安靜讓這個(gè)世界顯得聒噪和喧囂。 你沒有讓我發(fā)現(xiàn)莫扎特、莎士比亞或蘭波。你沒有帶我去看過戲劇或展覽,沒有社...
    LLYI閱讀 230評(píng)論 0 0

友情鏈接更多精彩內(nèi)容