最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的CountDownLatch簡單理解

 更新時(shí)間:2024年01月17日 09:57:14   作者:java-zh  
這篇文章主要介紹了Java中的CountDownLatch簡單理解,CountDownLatch是一個(gè)同步工具類,用來攜調(diào)多個(gè)線程之間的同步,它是是使用一個(gè)計(jì)數(shù)器進(jìn)行實(shí)現(xiàn)的,計(jì)數(shù)器初始值為線程數(shù)量,需要的朋友可以參考下

一、什么是CountDownLatch

CountDownLatch是一個(gè)同步工具類,用來攜調(diào)多個(gè)線程之間的同步,它是是使用一個(gè)計(jì)數(shù)器進(jìn)行實(shí)現(xiàn)的,計(jì)數(shù)器初始值為線程數(shù)量。

當(dāng)每一個(gè)線程完成自己任務(wù)后,計(jì)數(shù)器的值就會(huì)減1。

當(dāng)計(jì)數(shù)器的值為0時(shí),表示所有的線程都已經(jīng)完成一些任務(wù),然后再CountDownLatch上等待的線程就可以恢復(fù)執(zhí)行下來的任務(wù)。

二、哪些場景使用CountDownLatch

使用場景

  1. 某個(gè)線程需要在其他n個(gè)線程執(zhí)行完畢后再往下執(zhí)行。將CountDownLatch的計(jì)算器初始化化為new CountDownLatch(n),每當(dāng)一個(gè)線程任務(wù)執(zhí)行完畢,就將計(jì)數(shù)器減一(countDownLatch.countDown()),當(dāng)計(jì)數(shù)器變?yōu)?的時(shí)候,在CountDownLatch上的線程就會(huì)被喚醒 。比如,啟動(dòng)一個(gè)服務(wù)時(shí),主線程要等待多個(gè)組件加載完畢,之后在繼續(xù)執(zhí)行。
  2. 多個(gè)線程并行執(zhí)行同一個(gè)任務(wù),提高響應(yīng)速度。注意時(shí)并行,不是并發(fā),強(qiáng)調(diào)的是多個(gè)線程在某一時(shí)刻同時(shí)開始執(zhí)行。類似于賽跑,將多個(gè)線程放到起點(diǎn),等待起跑,然后同時(shí)開跑。做法是初始化一個(gè)共享的CountDownLatch(1),將其計(jì)數(shù)器初始化為1,多個(gè)線程在開始執(zhí)行任務(wù)前首先countDownLatch.await(),當(dāng)主線程調(diào)用countDown()時(shí),計(jì)數(shù)器為0,多個(gè)線程同時(shí)被喚醒。

三、CountDownLatch常用的方法

  • new 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í)行完畢
  • boolean await(long timeout,TimeUnit unit):此方法至多會(huì)等待指定的時(shí)間,然后超時(shí)會(huì)自動(dòng)喚醒,若timeout小于等于0,則不會(huì)等待。當(dāng)計(jì)數(shù)器變?yōu)?,則返回true。若指定的等待時(shí)間過去了,則返回false。

四、CountDownLatch使用案例

線程池+CountDownLatch

public class Test {
    public static void main(String[] args) throws InterruptedException {
        //當(dāng)前執(zhí)行的線程數(shù)量
        Integer poolNum = 10;
        long start = System.currentTimeMillis();
        //初始化線程運(yùn)行的數(shù)量
        CountDownLatch countDownLatch = new CountDownLatch(poolNum);
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 1; i <= poolNum; i++) {
            //耗時(shí)
            Integer time = i*1000;
            ThreadPoolUtils.execute(()->{
                try {
                    //假設(shè)邏輯執(zhí)行的耗時(shí)
                    Thread.sleep(time);
                    map.put(time,time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    countDownLatch.countDown();
                }
            });
        }
        countDownLatch.await();
        System.out.println("總耗時(shí):"+(System.currentTimeMillis()-start));
        for (Integer key: map.keySet()){
            //打印出來的key值是沒有順序的,因?yàn)楦偁幍腃PU資源不一樣
            System.out.println("map的key為:"+key+" map的值為:"+ map.get(key));
        }
    }
}

到此這篇關(guān)于Java中的CountDownLatch簡單理解的文章就介紹到這了,更多相關(guān)CountDownLatch簡單理解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的ScheduledThreadPoolExecutor定時(shí)任務(wù)詳解

    Java中的ScheduledThreadPoolExecutor定時(shí)任務(wù)詳解

    這篇文章主要介紹了Java中的ScheduledThreadPoolExecutor詳解,??ScheduledThreadPoolExecutor?繼承自?ThreadPoolExecutor,它主要用來在給定的延遲之后運(yùn)行任務(wù),或者定期執(zhí)行任務(wù),ScheduledThreadPoolExecutor?的功能與?Timer?類似<BR>,需要的朋友可以參考下
    2023-12-12
  • Java如何優(yōu)雅的實(shí)現(xiàn)微信登錄注冊

    Java如何優(yōu)雅的實(shí)現(xiàn)微信登錄注冊

    這篇文章主要給大家介紹了關(guān)于Java如何優(yōu)雅的實(shí)現(xiàn)微信登錄注冊的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java聊天室之實(shí)現(xiàn)客戶端群聊功能

    Java聊天室之實(shí)現(xiàn)客戶端群聊功能

    這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之實(shí)現(xiàn)客戶端群聊功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下
    2022-10-10
  • Java實(shí)現(xiàn)最小生成樹MST的兩種解法

    Java實(shí)現(xiàn)最小生成樹MST的兩種解法

    最小生成樹(MST)指在連通圖的所有生成樹中,所有邊的權(quán)值和最小的生成樹。本文介紹了求最小生成樹的兩種方法:Prim算法和Kruskal算法,需要的可以參考一下
    2022-05-05
  • Reactor3 Map與FlatMap的區(qū)別示例詳解

    Reactor3 Map與FlatMap的區(qū)別示例詳解

    這篇文章主要為大家介紹了Reactor3 Map與FlatMap的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • springboot3生成本地文件url的實(shí)現(xiàn)示例

    springboot3生成本地文件url的實(shí)現(xiàn)示例

    本文主要介紹了springboot3生成本地文件url的實(shí)現(xiàn)示例,從而提供一種高效的文件管理方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • SpringBoot整合JPA 基礎(chǔ)使用示例教程

    SpringBoot整合JPA 基礎(chǔ)使用示例教程

    JPA(Java Persistence API)是Java提供的一套數(shù)據(jù)持久化標(biāo)準(zhǔn),通過對象-關(guān)系映射(ORM)技術(shù)實(shí)現(xiàn)Java對象與數(shù)據(jù)庫表之間的映射,它提供了一系列注解和接口,簡化了數(shù)據(jù)庫操作,使得開發(fā)者可以通過操作對象來進(jìn)行數(shù)據(jù)庫交互,而無需編寫復(fù)雜的SQL語句
    2024-10-10
  • SpringBoot如何接收前端傳來的json數(shù)據(jù)

    SpringBoot如何接收前端傳來的json數(shù)據(jù)

    這篇文章主要介紹了SpringBoot如何接收前端傳來的json數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java圖形界面GUI布局方式(小結(jié))

    Java圖形界面GUI布局方式(小結(jié))

    這篇文章主要介紹了Java圖形界面GUI布局方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實(shí)現(xiàn)DelayQueue延遲隊(duì)列示例代碼

    Java實(shí)現(xiàn)DelayQueue延遲隊(duì)列示例代碼

    Java中的DelayQueue是一個(gè)特殊的隊(duì)列,它只允許在指定的延遲時(shí)間之后才能從隊(duì)列中取出元素,這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)DelayQueue延遲隊(duì)列的相關(guān)資料,需要的朋友可以參考下
    2025-07-07

最新評(píng)論

成都市| 望江县| 云梦县| 莱西市| 衡水市| 郁南县| 新绛县| 当阳市| 白河县| 涡阳县| 南澳县| 望谟县| 哈巴河县| 恭城| 福清市| 麻栗坡县| 梨树县| 徐汇区| 同江市| 沅江市| 栖霞市| 天峨县| 谢通门县| 抚松县| 汽车| 磴口县| 酒泉市| 临夏县| 荔波县| 文昌市| 天台县| 盘山县| 定兴县| 锦屏县| 太仆寺旗| 金昌市| 仙游县| 右玉县| 交口县| 揭阳市| 克什克腾旗|