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

Java?CountDownLatch線程同步源碼硬核解析

 更新時(shí)間:2023年01月27日 10:06:18   作者:好大的月亮  
對于并發(fā)執(zhí)行,Java中的CountDownLatch是一個重要的類。為了更好的理解CountDownLatch這個類,本文將通過例子和源碼帶領(lǐng)大家深入解析這個類的原理,感興趣的可以學(xué)習(xí)一下

場景

有時(shí)間在主線程中開啟了多線程后,主線程需要等所有線程執(zhí)行完畢才能return,這個時(shí)候就需要在return前攔一下,直到所有線程執(zhí)行完畢。

或者,某些場景下需要多個線程同一時(shí)間執(zhí)行,需要在起步的時(shí)候統(tǒng)一攔一下,然后收到通知再運(yùn)行。

java.util.concurrent.CountDownLatch就能實(shí)現(xiàn)我們上面的這些需求。

CountDownLatch

CountDownLatch是通過一個計(jì)數(shù)器來實(shí)現(xiàn)的,計(jì)數(shù)器的初始化值為線程的數(shù)量。每當(dāng)一個線程完成了自己的任務(wù)后,計(jì)數(shù)器的值就相應(yīng)得減1。當(dāng)計(jì)數(shù)器到達(dá)0時(shí),表示所有的線程都已完成任務(wù),然后在閉鎖上等待的線程就可以恢復(fù)執(zhí)行任務(wù)

代碼demo

直接上demo把。

主線程等待多線程完成后返回

CountDownLatch countDownLatch = new CountDownLatch(5);
for (int i = 0; i < 5; i++) {
    new Thread(() -> {
        String name = Thread.currentThread().getName();
        System.out.println(name + "等待5秒" + LocalDateTime.now());
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println(name + "扣減1" + LocalDateTime.now());
        countDownLatch.countDown();
    }).start();
}
try {
    countDownLatch.await();
} catch (InterruptedException e) {
    throw new RuntimeException(e);
}
System.out.println("finish");

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

讓所有線程同一時(shí)間執(zhí)行

CountDownLatch countDownLatch = new CountDownLatch(1);
for (int i = 0; i < 5; i++) {
       new Thread(() -> {
           String name = Thread.currentThread().getName();
           try {
               System.out.println(name + "準(zhǔn)備" + LocalDateTime.now());
               countDownLatch.await();
               System.out.println(name + "完成" + LocalDateTime.now());
           } catch (InterruptedException e) {
               throw new RuntimeException(e);
           }
       }).start();
}
try {
    Thread.sleep(5000);
    System.out.println("link start");
} catch (InterruptedException e) {
    throw new RuntimeException(e);
}
countDownLatch.countDown();

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

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

相關(guān)文章

  • idea中將單個java類導(dǎo)出為jar包文件的方法

    idea中將單個java類導(dǎo)出為jar包文件的方法

    這篇文章主要給大家介紹了關(guān)于idea中將單個java類導(dǎo)出為jar包文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Thread.sleep(0)的寫法原理深入解析

    Thread.sleep(0)的寫法原理深入解析

    這篇文章主要為大家介紹了Thread.sleep(0)的寫法原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • java  設(shè)計(jì)模式之單例模式

    java 設(shè)計(jì)模式之單例模式

    這篇文章主要介紹了java 設(shè)計(jì)模式之單例模式的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java實(shí)現(xiàn)跳轉(zhuǎn)到指定頁面的方法小結(jié)

    Java實(shí)現(xiàn)跳轉(zhuǎn)到指定頁面的方法小結(jié)

    在Java中,實(shí)現(xiàn)頁面跳轉(zhuǎn)主要涉及到Web開發(fā),而這通常通過使用Java的Web框架(如Servlet、Spring MVC)來完成,下面講解一下如何在不同的Java Web框架中實(shí)現(xiàn)頁面跳轉(zhuǎn),文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-05-05
  • @ConfigurationProperties綁定配置信息至Array、List、Map、Bean的實(shí)現(xiàn)

    @ConfigurationProperties綁定配置信息至Array、List、Map、Bean的實(shí)現(xiàn)

    這篇文章主要介紹了@ConfigurationProperties綁定配置信息至Array、List、Map、Bean的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java正則表達(dá)式用法大全(深度好文)

    java正則表達(dá)式用法大全(深度好文)

    這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式用法大全的相關(guān)資料,正則表達(dá)式在處理字符串時(shí)非常有用,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Java流程控制之順序結(jié)構(gòu)

    Java流程控制之順序結(jié)構(gòu)

    Java中的流程控制語句可以這樣分類:順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。下面文章我們就來看看來順序結(jié)構(gòu)的詳細(xì)介紹,主要以順序結(jié)構(gòu)簡單圖示及詳細(xì)解說該內(nèi)容,需要的小伙伴可以參考一下
    2021-12-12
  • java配置context.xml文件的方法圖解

    java配置context.xml文件的方法圖解

    這篇文章主要介紹了java配置context.xml文件的方法圖解,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java每隔兩個數(shù)刪掉一個數(shù)問題詳解

    Java每隔兩個數(shù)刪掉一個數(shù)問題詳解

    這篇文章主要介紹了Java每隔兩個數(shù)刪掉一個數(shù)問題詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 如何將maven項(xiàng)目劃分為多個模塊

    如何將maven項(xiàng)目劃分為多個模塊

    這篇文章主要介紹了如何將maven項(xiàng)目劃分為多個模塊,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

永宁县| 武义县| 扶余县| 泸西县| 花垣县| 尖扎县| 辽阳市| 柳江县| 乌拉特后旗| 利津县| 台北县| 哈尔滨市| 黔西县| 乌拉特前旗| 巩留县| 永安市| 贞丰县| 福贡县| 盐山县| 邵东县| 筠连县| 老河口市| 高碑店市| 麻阳| 梁山县| 南乐县| 南开区| 长治县| 嘉鱼县| 乐亭县| 福贡县| 衡水市| 长葛市| 长寿区| 鞍山市| 临澧县| 同仁县| 晋城| 安仁县| 南川市| 宣威市|