欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?CountDownLatch線(xiàn)程同步源碼硬核解析

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

場(chǎng)景

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

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

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

CountDownLatch

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

代碼demo

直接上demo把。

主線(xiàn)程等待多線(xiàn)程完成后返回

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é)果

讓所有線(xiàn)程同一時(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線(xiàn)程同步源碼硬核解析的文章就介紹到這了,更多相關(guān)Java CountDownLatch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PowerJobAutoConfiguration自動(dòng)配置源碼流程解析

    PowerJobAutoConfiguration自動(dòng)配置源碼流程解析

    這篇文章主要為大家介紹了PowerJobAutoConfiguration自動(dòng)配置源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 數(shù)據(jù)結(jié)構(gòu)與算法之并查集(不相交集合)

    數(shù)據(jù)結(jié)構(gòu)與算法之并查集(不相交集合)

    并查集是一種挺高效的數(shù)據(jù)結(jié)構(gòu)。實(shí)現(xiàn)簡(jiǎn)單,只是所有元素統(tǒng)一遵從一個(gè)規(guī)律所以讓辦事情的效率高效起來(lái)。這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法——并查集(不相交集合),需要的朋友可以參考下
    2019-11-11
  • 微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼【java版】

    微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼【java版】

    這篇文章主要介紹了微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼,本實(shí)例是為了實(shí)現(xiàn)在管理后臺(tái)實(shí)現(xiàn)微信菜單的添加刪除管理。需要的朋友可以參考下
    2018-06-06
  • springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行

    springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行

    這篇文章主要介紹了springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • mybatis postgresql 批量刪除操作方法

    mybatis postgresql 批量刪除操作方法

    PostgreSQL是一種特性非常齊全的自由軟件的對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS),這篇文章主要介紹了mybatis postgresql 批量刪除操作,需要的朋友可以參考下
    2020-02-02
  • mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作

    mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作

    這篇文章主要介紹了mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java字符串常量池示例詳解

    Java字符串常量池示例詳解

    作為最基礎(chǔ)的引用數(shù)據(jù)類(lèi)型,Java設(shè)計(jì)者為 String 提供了字符串常量池以提高其性能,下面這篇文章主要給大家介紹了關(guān)于Java字符串常量池的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • java怎么連接并訪問(wèn)activemq

    java怎么連接并訪問(wèn)activemq

    這篇文章主要介紹了java怎么連接并訪問(wèn)activemq,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 基于SpringBoot和Vue寫(xiě)一個(gè)2048小游戲

    基于SpringBoot和Vue寫(xiě)一個(gè)2048小游戲

    創(chuàng)建一個(gè)基于 Java Spring Boot 后端和 Vue 前端的 2048 游戲,可以按照以下步驟進(jìn)行,這個(gè)項(xiàng)目將包括后端(用來(lái)處理游戲邏輯)和前端(用來(lái)顯示游戲界面和與用戶(hù)交互),感興趣的小伙伴可以參考本文自己動(dòng)手嘗試一下
    2024-08-08
  • Java中為什么重寫(xiě)equals()也需要重寫(xiě)hashCode方法

    Java中為什么重寫(xiě)equals()也需要重寫(xiě)hashCode方法

    這篇文章主要介紹了Java中為什么重寫(xiě)equals()也需要重寫(xiě)hashCode(),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評(píng)論