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

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

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

介紹

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

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

每次調用CountDown(),計數減1

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

場景

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

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

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

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

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

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

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

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

注意事項:

  • 使用CountDownLatch必須確保計數器數量與子線程數量一致,且countDown必須要執(zhí)行,否則出現(xiàn)計數器不為0,導致主線程一致等待的情況
  • 在執(zhí)行任務的線程中,使用了try...finally結構,該結構可以保證創(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("南京祿口機場_機長啟動飛機起飛");
? ? ? ? ? ? //當前航班已到乘客
? ? ? ? ? ? System.out.println("當前航班已到乘客"+list);
? ? ? ? });
? ? }

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

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

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

相關文章

  • Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法

    Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法

    這篇文章主要介紹了Java Web開發(fā)之基于Session的購物商店實現(xiàn)方法,涉及Java針對session的操作及數據庫操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Java實現(xiàn)圖片與二進制的互相轉換

    Java實現(xiàn)圖片與二進制的互相轉換

    這篇文章主要為大家詳細介紹了Java實現(xiàn)圖片與二進制的互相轉換,將圖片轉二進制再將二進制轉成圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 全面解析Java設計模式之單例模式

    全面解析Java設計模式之單例模式

    這篇文章主要幫助大家全面解析Java設計模式之單例模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • MyBatis實現(xiàn)萬能Map和模糊查詢

    MyBatis實現(xiàn)萬能Map和模糊查詢

    本文主要介紹了MyBatis實現(xiàn)萬能Map和模糊查詢,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Android中比較常見的Java super關鍵字

    Android中比較常見的Java super關鍵字

    這篇文章主要為大家介紹了Android中比較常見的Java super關鍵字,具有一定的學習參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 從java面試題了解你所模糊的數組

    從java面試題了解你所模糊的數組

    這篇文章主要介紹了從java面試題了解你所模糊的數組,數組用來存儲一系列的數據項,其中的每一項具有相同的基本數據類型、類或相同的父類。通過使用數組,可以在很大程度上縮短和簡化程序代碼,從而提高應用程序的效率。,需要的朋友可以參考下
    2019-06-06
  • Java+Spring+MySql環(huán)境中安裝和配置MyBatis的教程

    Java+Spring+MySql環(huán)境中安裝和配置MyBatis的教程

    這篇文章主要介紹了Java+Spring+MySql環(huán)境中安裝和配置MyBatis的教程,MyBatis一般被用來增強數據庫操作,文中對MyBatis的主配置文件有較為詳細的講解,需要的朋友可以參考下
    2016-04-04
  • SpringBoot中使用Session共享實現(xiàn)分布式部署的示例代碼

    SpringBoot中使用Session共享實現(xiàn)分布式部署的示例代碼

    這篇文章主要介紹了SpringBoot中使用Session共享實現(xiàn)分布式部署的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java 使用Axis調用WebService的示例代碼

    Java 使用Axis調用WebService的示例代碼

    這篇文章主要介紹了Java 使用Axis調用WebService的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • 十分簡單易懂的Java應用程序性能調優(yōu)技巧分享

    十分簡單易懂的Java應用程序性能調優(yōu)技巧分享

    這篇文章主要介紹了十分簡單易懂的Java性能調優(yōu)技巧分享,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11

最新評論