色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

java并發編程專題(八)----(JUC)實例講解CountDownLatch

瀏覽:4日期:2022-08-29 18:08:33

CountDownLatch 是一個非常實用的多線程控制工具類。” Count Down ” 在英文中意為倒計數, Latch 為門問的意思。如果翻譯成為倒計數門閥, 我想大家都會覺得不知所云吧! 因此,這里簡單地稱之為倒計數器。在這里, 門問的含義是:把門鎖起來,不讓里面的線程跑出來。因此,這個工具通常用來控制線程等待,它可以讓某一個線程等待直到倒計時結束, 再開始執行。

CountDown Latch 的構造函數接收一個整數作為參數,即當前這個計數器的計數個數。

public CountDownLatch(int count)

CountDownLatch是一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。一個CountDownLatch初始化為給定的計數 。 調用await方法阻塞,直到當前計數為零,在調用countDown()方法之后,所有等待的線程被釋放,任何后續調用await立即返回。 這是一次性的現象 - 計數不能重置。 如果需要重置計數,考慮使用CyclicBarrier ,CyclicBarrier的計數器可以被重置后使用,因此它被稱為是循環的barrier。

主要方法:

// 使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷。void await()// 使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷或超出了指定的等待時間。boolean await(long timeout, TimeUnit unit)// 遞減鎖存器的計數,如果計數到達零,則釋放所有等待的線程。void countDown()// 返回當前計數。long getCount()

我們來看一個例子:

public class TestCountDownLatch { private static final int RUNNER_NUMBER = 5; // 運動員個數 private static final Random RANDOM = new Random(); public static void main(String[] args) { // 用于判斷發令之前運動員是否已經完全進入準備狀態,需要等待5個運動員,所以參數為5 CountDownLatch readyLatch = new CountDownLatch(RUNNER_NUMBER); // 用于判斷裁判是否已經發令,只需要等待一個裁判,所以參數為1 CountDownLatch startLatch = new CountDownLatch(1); for (int i = 0; i < RUNNER_NUMBER; i++) { Thread t = new Thread(new Runner((i + 1) + '號運動員', readyLatch, startLatch)); t.start(); } try { readyLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } startLatch.countDown(); System.out.println('裁判:所有運動員準備完畢,開始...'); } static class Runner implements Runnable { private CountDownLatch readyLatch; private CountDownLatch startLatch; private String name; public Runner(String name, CountDownLatch readyLatch, CountDownLatch startLatch) { this.name = name; this.readyLatch = readyLatch; this.startLatch = startLatch; } public void run() { int readyTime = RANDOM.nextInt(1000); System.out.println(name + ':我需要' + readyTime + '秒時間準備.'); try {Thread.sleep(readyTime); } catch (InterruptedException e) {e.printStackTrace(); } System.out.println(name + ':我已經準備完畢.'); readyLatch.countDown(); try {startLatch.await(); // 等待裁判發開始命令 } catch (InterruptedException e) {e.printStackTrace(); } System.out.println(name + ':開跑...'); } }}

打印結果:

1號運動員:我需要547秒時間準備.2號運動員:我需要281秒時間準備.4號運動員:我需要563秒時間準備.5號運動員:我需要916秒時間準備.3號運動員:我需要461秒時間準備.2號運動員:我已經準備完畢.3號運動員:我已經準備完畢.1號運動員:我已經準備完畢.4號運動員:我已經準備完畢.5號運動員:我已經準備完畢.裁判:所有運動員準備完畢,開始...3號運動員:開跑...2號運動員:開跑...1號運動員:開跑...4號運動員:開跑...5號運動員:開跑...

Process finished with exit code 0

注意:計數器必須大于等于0,只是等于0時候,計數器就是零,調用await方法時不會阻塞當前線程。

以上就是java并發編程專題(八)----(JUC)實例講解CountDownLatch的詳細內容,更多關于java juc CountDownLatch的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 美女一丝不佳一级毛片香蕉 | 亚洲视频在线精品 | 精品在线免费视频 | 99免费在线观看 | 国产香蕉在线视频一级毛片 | 国产欧美日本在线 | a级一级黄色片 | 欧美综合图片一区二区三区 | 日本一级特黄aa毛片免费观看 | 免费无毒| 精品国产一级毛片 | 国产成人精品无缓存在线播放 | 美女互操 | 成年片免费网址网站 | 亚洲永久中文字幕在线 | 萌白酱国产一区 | 被老外玩爽的中国美女视频 | 美女插跳蛋视频叫爽 | 不卡一区二区在线 | 亚洲精品亚洲人成毛片不卡 | 97青青草原国产免费观看 | 国产91精品久久久久久久 | 精品精品国产欧美在线观看 | 欧美高清另类自拍视频在线看 | 久久久久88色偷偷免费 | 大量愉拍情侣在线视频 | 国产孕妇孕交视频在线观看 | 欧美高清视频手机在在线 | 狠狠色丁香久久婷婷综合_中 | 日日操夜夜爽 | 麻豆国产 | 亚洲国产精品第一区二区三区 | 91网站在线免费观看 | 亚洲午夜精品一级在线播放放 | 一级做a级爰片性色毛片视频 | 久久免费视频在线 | a级毛片免费观看网站 | 亚洲欧美日韩一级特黄在线 | 亚洲精品久久九九热 | 国产精品永久免费自在线观看 | 欧美日本在线一区二区三区 |