日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

J.U.C系列(一)CountDownLatch的使用

發布時間:2025/3/19 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J.U.C系列(一)CountDownLatch的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CountDownLatch

它是用來控制一個或者多個線程等待多個線程。
它的實現原理是內部使用了一個ctn的計數器,當調用countDown()方法的時候計數器就執行減1操作直到減到0的的時候那些之前調用await()方法而在等待的線程就會被喚醒。

有一個場景可以很好理解這個關鍵字的使用:火箭發射案例?;鸺l射的時候需要每個子程序都準備好才能發射,如何做到讓各個子程序異步的去執行自己的程序然后都準備完成再發射火箭呢?
demo如下

package com.leo.demo.threadtest.countdownlatch;import java.util.concurrent.*;/*** @ClassName: RocketLatchingTest* @Description: 火箭發射的案例* 1、管理發射的主程序需要等待各個檢查子程序完成才能發射* @Author: leo825* @Date: 2019-08-21 10:10* @Version: 1.0*/ public class RocketLatchingTest {public static void main(String[] args) throws InterruptedException {//子線程阻塞CountDownLatch childPro = new CountDownLatch(5);//生成隨機數模擬子程序執行消耗時間ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();//模擬火箭發射子程序的線程池ExecutorService executor = Executors.newFixedThreadPool(5);for (int i = 0; i < 5; i++) {//模擬一個隨機代表每一個子程序的耗時int costTime = threadLocalRandom.nextInt(10);executor.submit(() -> {try {String threadName = Thread.currentThread().getName();System.out.println(threadName + " 開始處理子程序...");System.out.println(threadName + " 處理時間為:" + costTime + "s");TimeUnit.SECONDS.sleep(costTime);System.out.println(Thread.currentThread().getName() + " 準備就緒!!!");childPro.countDown();//完成預期工作并發出完成信號} catch (Exception e) {e.printStackTrace();}});}System.out.println("發射程序開始準備...");childPro.await();//模擬火箭發射倒計時for (int i = 10; i > 0; i--) {System.out.println("發射倒計時:" + i);TimeUnit.SECONDS.sleep(1);}System.out.println("點火!!!");executor.shutdown();} }

運行結果如下:

發射程序開始準備... pool-1-thread-1 開始處理子程序... pool-1-thread-1 處理時間為:8s pool-1-thread-2 開始處理子程序... pool-1-thread-2 處理時間為:9s pool-1-thread-5 開始處理子程序... pool-1-thread-4 開始處理子程序... pool-1-thread-3 開始處理子程序... pool-1-thread-4 處理時間為:8s pool-1-thread-5 處理時間為:2s pool-1-thread-3 處理時間為:7s pool-1-thread-5 準備就緒!!! pool-1-thread-3 準備就緒!!! pool-1-thread-1 準備就緒!!! pool-1-thread-4 準備就緒!!! pool-1-thread-2 準備就緒!!! 發射倒計時:10 發射倒計時:9 發射倒計時:8 發射倒計時:7 發射倒計時:6 發射倒計時:5 發射倒計時:4 發射倒計時:3 發射倒計時:2 發射倒計時:1 點火!!!

總結

以上是生活随笔為你收集整理的J.U.C系列(一)CountDownLatch的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。