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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

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

CountDown Latch 的構(gòu)造函數(shù)接收一個(gè)整數(shù)作為參數(shù),即當(dāng)前這個(gè)計(jì)數(shù)器的計(jì)數(shù)個(gè)數(shù)。

public CountDownLatch(int count)

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

主要方法:

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

我們來(lái)看一個(gè)例子:

public class TestCountDownLatch { private static final int RUNNER_NUMBER = 5; // 運(yùn)動(dòng)員個(gè)數(shù) private static final Random RANDOM = new Random(); public static void main(String[] args) { // 用于判斷發(fā)令之前運(yùn)動(dòng)員是否已經(jīng)完全進(jìn)入準(zhǔn)備狀態(tài),需要等待5個(gè)運(yùn)動(dòng)員,所以參數(shù)為5 CountDownLatch readyLatch = new CountDownLatch(RUNNER_NUMBER); // 用于判斷裁判是否已經(jīng)發(fā)令,只需要等待一個(gè)裁判,所以參數(shù)為1 CountDownLatch startLatch = new CountDownLatch(1); for (int i = 0; i < RUNNER_NUMBER; i++) { Thread t = new Thread(new Runner((i + 1) + '號(hào)運(yùn)動(dòng)員', readyLatch, startLatch)); t.start(); } try { readyLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } startLatch.countDown(); System.out.println('裁判:所有運(yùn)動(dòng)員準(zhǔn)備完畢,開始...'); } 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 + '秒時(shí)間準(zhǔn)備.'); try {Thread.sleep(readyTime); } catch (InterruptedException e) {e.printStackTrace(); } System.out.println(name + ':我已經(jīng)準(zhǔn)備完畢.'); readyLatch.countDown(); try {startLatch.await(); // 等待裁判發(fā)開始命令 } catch (InterruptedException e) {e.printStackTrace(); } System.out.println(name + ':開跑...'); } }}

打印結(jié)果:

1號(hào)運(yùn)動(dòng)員:我需要547秒時(shí)間準(zhǔn)備.2號(hào)運(yùn)動(dòng)員:我需要281秒時(shí)間準(zhǔn)備.4號(hào)運(yùn)動(dòng)員:我需要563秒時(shí)間準(zhǔn)備.5號(hào)運(yùn)動(dòng)員:我需要916秒時(shí)間準(zhǔn)備.3號(hào)運(yùn)動(dòng)員:我需要461秒時(shí)間準(zhǔn)備.2號(hào)運(yùn)動(dòng)員:我已經(jīng)準(zhǔn)備完畢.3號(hào)運(yùn)動(dòng)員:我已經(jīng)準(zhǔn)備完畢.1號(hào)運(yùn)動(dòng)員:我已經(jīng)準(zhǔn)備完畢.4號(hào)運(yùn)動(dòng)員:我已經(jīng)準(zhǔn)備完畢.5號(hào)運(yùn)動(dòng)員:我已經(jīng)準(zhǔn)備完畢.裁判:所有運(yùn)動(dòng)員準(zhǔn)備完畢,開始...3號(hào)運(yùn)動(dòng)員:開跑...2號(hào)運(yùn)動(dòng)員:開跑...1號(hào)運(yùn)動(dòng)員:開跑...4號(hào)運(yùn)動(dòng)員:開跑...5號(hào)運(yùn)動(dòng)員:開跑...

Process finished with exit code 0

注意:計(jì)數(shù)器必須大于等于0,只是等于0時(shí)候,計(jì)數(shù)器就是零,調(diào)用await方法時(shí)不會(huì)阻塞當(dāng)前線程。

以上就是java并發(fā)編程專題(八)----(JUC)實(shí)例講解CountDownLatch的詳細(xì)內(nèi)容,更多關(guān)于java juc CountDownLatch的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: av人摸人人人澡人人超碰 | 欧美国产高清欧美 | 亚洲国产精久久久久久久春色 | 欧美俄罗斯一级毛片 | 99日韩| 男人久久天堂 | 激情综 | 国产成人亚洲精品一区二区在线看 | 国产女王s调视频vk 国产女王vk | 国产日韩欧美自拍 | 日本成本人片 | 亚洲特级黄色片 | www.久草| 三级伦理网站 | a毛片成人免费全部播放 | 国产精品黄色 | 性强烈欧美一级毛片 | 免费人成网站免费看视频 | 国产视频合集 | 狠狠做久久深爱婷婷97动漫 | 各种偷拍盗摄视频在线观看 | 美国一级做a一级视频 | 国产黄色三级三级三级 | 国产视频成人 | 亚洲小视频在线 | 456主播喷水在线观看 | 性欧美成人依依影院 | 精品欧美一区二区三区精品久久 | 午夜在线播放免费人成无 | 日本国产最新一区二区三区 | 国产日韩在线观看视频 | 亚洲国产精品一区二区久 | 免费观看日本高清a毛片 | 一区二区三区在线看 | 国产高清日韩 | 成人在线视频免费 | 在线国产一区二区 | 亚欧精品一区二区三区 | 中文无线乱码二三四区 | 成人网18免费看 | 免费在线观看的毛片 |