亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2020年07月02日 11:02:49   作者:rickiyang  
這篇文章主要介紹了java CountDownLatch的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家理解和學(xué)習(xí),感興趣的朋友可以了解下

CountDownLatch 是一個(gè)非常實(shí)用的多線程控制工具類?!?Count Down ” 在英文中意為倒計(jì)數(shù), Latch 為門(mén)問(wèn)的意思。如果翻譯成為倒計(jì)數(shù)門(mén)閥, 我想大家都會(huì)覺(jué)得不知所云吧! 因此,這里簡(jiǎn)單地稱之為倒計(jì)數(shù)器。在這里, 門(mén)問(wèn)的含義是:把門(mén)鎖起來(lái),不讓里面的線程跑出來(lái)。因此,這個(gè)工具通常用來(lái)控制線程等待,它可以讓某一個(gè)線程等待直到倒計(jì)時(shí)結(jié)束, 再開(kāi)始執(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)備完畢,開(kāi)始...");
  }
  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ā)開(kāi)始命令
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      System.out.println(name + ":開(kāi)跑...");
    }
  }
}

打印結(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)備完畢,開(kāi)始...
3號(hào)運(yùn)動(dòng)員:開(kāi)跑...
2號(hào)運(yùn)動(dòng)員:開(kāi)跑...
1號(hào)運(yùn)動(dòng)員:開(kāi)跑...
4號(hào)運(yùn)動(dòng)員:開(kāi)跑...
5號(hào)運(yùn)動(dòng)員:開(kāi)跑...

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)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java pdf和jpg互轉(zhuǎn)案例

    Java pdf和jpg互轉(zhuǎn)案例

    這篇文章主要介紹了Java pdf和jpg互轉(zhuǎn)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • @FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式

    @FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式

    這篇文章主要介紹了@FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot2自動(dòng)裝配原理解析

    SpringBoot2自動(dòng)裝配原理解析

    這篇文章主要介紹了SpringBoot2自動(dòng)裝配原理解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Spring?Boot?優(yōu)雅停機(jī)原理詳解

    Spring?Boot?優(yōu)雅停機(jī)原理詳解

    這篇文章主要為大家介紹了Spring?Boot?優(yōu)雅停機(jī)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 從零開(kāi)始讓你的Spring?Boot項(xiàng)目跑在Linux服務(wù)器

    從零開(kāi)始讓你的Spring?Boot項(xiàng)目跑在Linux服務(wù)器

    這篇文章主要給大家介紹了如何從零開(kāi)始讓你的Spring?Boot項(xiàng)目跑在Linux服務(wù)器的相關(guān)資料,由于springboot是內(nèi)嵌了tomcat,所以可以直接將項(xiàng)目打包上傳至服務(wù)器上,需要的朋友可以參考下
    2021-11-11
  • java如何獲取兩個(gè)List集合之間的交集、差集、并集

    java如何獲取兩個(gè)List集合之間的交集、差集、并集

    在日常開(kāi)發(fā)中經(jīng)常會(huì)遇到對(duì)2個(gè)集合的操作,例如2個(gè)集合之間取相同的元素(交集),2個(gè)集合之間取不相同的元素(差集)等等,這篇文章主要給大家介紹了關(guān)于java如何獲取兩個(gè)List集合之間的交集、差集、并集的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • Springboot下載excel文件中文名亂碼問(wèn)題及解決

    Springboot下載excel文件中文名亂碼問(wèn)題及解決

    這篇文章主要介紹了Springboot下載excel文件中文名亂碼問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java自定義標(biāo)簽用法實(shí)例分析

    Java自定義標(biāo)簽用法實(shí)例分析

    這篇文章主要介紹了Java自定義標(biāo)簽用法,結(jié)合實(shí)例形式分析了java自定義標(biāo)簽的定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • SpringBoot集成tika實(shí)現(xiàn)word轉(zhuǎn)html的操作代碼

    SpringBoot集成tika實(shí)現(xiàn)word轉(zhuǎn)html的操作代碼

    Tika是一個(gè)內(nèi)容分析工具,自帶全面的parser工具類,能解析基本所有常見(jiàn)格式的文件,得到文件的metadata,content等內(nèi)容,返回格式化信息,本文給大家介紹了SpringBoot集成tika實(shí)現(xiàn)word轉(zhuǎn)html的操作,需要的朋友可以參考下
    2024-06-06
  • Spring Boot整合elasticsearch的詳細(xì)步驟

    Spring Boot整合elasticsearch的詳細(xì)步驟

    這篇文章主要介紹了Spring Boot整合elasticsearch的詳細(xì)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論