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

Java多線程CountDownLatch的實現(xiàn)

 更新時間:2022年02月18日 08:35:57   作者:胡安民  
本文主要介紹了Java多線程CountDownLatch的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

介紹

CountDownLatch是一個同步輔助類,它允許一個或多個線程一直等待直到其他線程執(zhí)行完畢才開始執(zhí)行。

用給定的計數(shù)初始化CountDownLatch,其含義是要被等待執(zhí)行完的線程個數(shù)。

每次調(diào)用CountDown(),計數(shù)減1

主程序執(zhí)行到await()函數(shù)會阻塞等待線程的執(zhí)行,直到計數(shù)為0

場景

1:多線程讀取批量文件, 并且讀取完成之后匯總處理

2:多線程讀取Excel多個sheet,讀取完成之后獲取匯總獲取的結(jié)果

3:多個人一起一起來吃飯,主人等待客人到來,客人一個個從不同地方來到飯店,主人需要等到所有人都到來之后,才能開飯

4:汽車站,所有乘客都從不同的地方趕到汽車站,必須等到所有乘客都到了,汽車才會出發(fā),(如果設(shè)置了超時等待,那么當(dāng)某個時間點到了,汽車也出發(fā))

5: 百米賽跑,4名運動員選手到達場地等待裁判口令,裁判一聲口令,選手聽到后同時起跑,當(dāng)所有選手到達終點,裁判進行匯總排名

6: 4名選手進行大眾投票,投票現(xiàn)場有500個票, 投票時間是30分鐘,500個票投完結(jié)束投票,或者投票時間到了也結(jié)束投票

作用:可以用來確保某些活動直到其他活動都完成后才繼續(xù)執(zhí)行。

CountDownLatch非常適合于對任務(wù)進行拆分,使其并行執(zhí)行,比如某個任務(wù)執(zhí)行2s,其對數(shù)據(jù)的請求可以分為五個部分,那么就可以將這個任務(wù)拆分為5個子任務(wù),分別交由五個線程執(zhí)行,執(zhí)行完成之后再由主線程進行匯總,此時,總的執(zhí)行時間將決定于執(zhí)行最慢的任務(wù),平均來看,還是大大減少了總的執(zhí)行時間。

注意事項:

  • 使用CountDownLatch必須確保計數(shù)器數(shù)量與子線程數(shù)量一致,且countDown必須要執(zhí)行,否則出現(xiàn)計數(shù)器不為0,導(dǎo)致主線程一致等待的情況
  • 在執(zhí)行任務(wù)的線程中,使用了try...finally結(jié)構(gòu),該結(jié)構(gòu)可以保證創(chuàng)建的線程發(fā)生異常時CountDownLatch.countDown()方法也會執(zhí)行,也就保證了主線程不會一直處于等待狀態(tài)。

案例(模擬乘客登機的場景)

? ? public static void main(String[] args) {
? ? ? ? CountDownLatchUtils.initialize("da1", 5);
? ? ? ? List<String> list=new CopyOnWriteArrayList<>();

? ? ? ? ExecutorUtils.create(()->{
? ? ? ? ? ? System.out.println("張三正在馬鞍山,準備趕到南京坐飛機,需要1小時的車程到機場");
? ? ? ? ? ? SleepTools.second(4);
? ? ? ? ? ? list.add("張三");
? ? ? ? ? ? CountDownLatchUtils.countDown("da1");
? ? ? ? });
? ? ? ? ExecutorUtils.create(()->{
? ? ? ? ? ? System.out.println("李四正在徐州,準備趕到南京坐飛機,需要5小時的車程到機場");
? ? ? ? ? ? SleepTools.second(15);
? ? ? ? ? ? list.add("李四");
? ? ? ? ? ? CountDownLatchUtils.countDown("da1");
? ? ? ? });

? ? ? ? ExecutorUtils.create(()->{
? ? ? ? ? ? System.out.println("王五正在蕪湖,準備趕到南京坐飛機,需要2小時的車程到機場");
? ? ? ? ? ? SleepTools.second(9);
? ? ? ? ? ? list.add("王五");
? ? ? ? ? ? CountDownLatchUtils.countDown("da1");
? ? ? ? });

? ? ? ? ExecutorUtils.create(()->{
? ? ? ? ? ? //飛機起飛
? ? ? ? ? ? CountDownLatchUtils.await("da1",10); ?//這里先模擬10秒 360秒=1小時
? ? ? ? ? ? System.out.println("南京祿口機場_機長啟動飛機起飛");
? ? ? ? ? ? //當(dāng)前航班已到乘客
? ? ? ? ? ? System.out.println("當(dāng)前航班已到乘客"+list);
? ? ? ? });
? ? }

以上代碼都是我封裝后的,主要是看邏輯就行了

張三正在馬鞍山,準備趕到南京坐飛機,需要1小時的車程到機場
李四正在徐州,準備趕到南京坐飛機,需要5小時的車程到機場
王五正在蕪湖,準備趕到南京坐飛機,需要2小時的車程到機場
南京祿口機場_機長啟動飛機起飛
當(dāng)前航班已到乘客[張三, 王五]

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

相關(guān)文章

  • springboot如何獲取yml里面的屬性值

    springboot如何獲取yml里面的屬性值

    這篇文章主要介紹了springboot如何獲取yml里面的屬性值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java啟用Azure Linux虛擬機診斷設(shè)置

    Java啟用Azure Linux虛擬機診斷設(shè)置

    這篇文章主要介紹了Java啟用Azure Linux虛擬機診斷設(shè)置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • lombok注解@Data使用在繼承類上時出現(xiàn)警告的問題及解決

    lombok注解@Data使用在繼承類上時出現(xiàn)警告的問題及解決

    Lombok的@Data注解簡化了實體類代碼,但在子類中使用時會出現(xiàn)警告,指出equals和hashCode方法不會考慮父類屬性,解決方法有兩種:一是在父類上使用@EqualsAndHashCode(callSuper=true)注解;二是通過配置lombok.config文件,均能有效解決警告問題
    2024-10-10
  • Java基礎(chǔ)之教你如何正確運用依賴注入

    Java基礎(chǔ)之教你如何正確運用依賴注入

    最近發(fā)現(xiàn)很多使用Spring框架的Java代碼存在依賴注入方式的誤用,甚至是濫用.因此整理了這篇文章,歡迎大家一起探討,需要的朋友可以參考下
    2021-05-05
  • Java中的Set集合簡單匯總解析

    Java中的Set集合簡單匯總解析

    這篇文章主要介紹了Java中的Set集合簡單匯總解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java 如何將網(wǎng)絡(luò)資源url轉(zhuǎn)化為File文件

    Java 如何將網(wǎng)絡(luò)資源url轉(zhuǎn)化為File文件

    這篇文章主要介紹了Java 如何將網(wǎng)絡(luò)資源url轉(zhuǎn)化為File文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 在maven中引入本地jar包的步驟

    在maven中引入本地jar包的步驟

    這篇文章主要介紹了在maven中引入本地jar包的步驟,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • java合并list方法代碼實例

    java合并list方法代碼實例

    這篇文章主要介紹了java合并list方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Spring Boot讀取自定義配置文件

    Spring Boot讀取自定義配置文件

    在Spring Boot項目中我們經(jīng)常需要讀取application.yml配置文件的自定義配置,今天就來羅列一下從yaml讀取配置文件的一些常用手段和方法。
    2021-05-05
  • Java實現(xiàn)有限狀態(tài)機的推薦方案分享

    Java實現(xiàn)有限狀態(tài)機的推薦方案分享

    有限狀態(tài)機又稱有限狀態(tài)自動機,簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型,這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)有限狀態(tài)機的推薦方案,需要的朋友可以參考下
    2021-11-11

最新評論

崇州市| 友谊县| 南木林县| 额尔古纳市| 肃南| 噶尔县| 海门市| 阿拉尔市| 壶关县| 石阡县| 济南市| 卢龙县| 文化| 新野县| 石景山区| 永定县| 宁陵县| 临颍县| 治多县| 得荣县| 鹤壁市| 泸西县| 简阳市| 阿瓦提县| 香港 | 玉屏| 松原市| 读书| 安乡县| 上犹县| 玛纳斯县| 三门县| 灌云县| 鹤峰县| 双柏县| 双江| 宕昌县| 顺平县| 惠来县| 明光市| 广昌县|