最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

public CountDownLatch(int count)

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

主要方法:

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

我們來看一個例子:

public class TestCountDownLatch {
  private static final int RUNNER_NUMBER = 5; // 運動員個數(shù)
  private static final Random RANDOM = new Random();
  public static void main(String[] args) {
    // 用于判斷發(fā)令之前運動員是否已經(jīng)完全進(jìn)入準(zhǔn)備狀態(tài),需要等待5個運動員,所以參數(shù)為5
    CountDownLatch readyLatch = new CountDownLatch(RUNNER_NUMBER);
    // 用于判斷裁判是否已經(jīng)發(fā)令,只需要等待一個裁判,所以參數(shù)為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("裁判:所有運動員準(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 + "秒時間準(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號運動員:我需要547秒時間準(zhǔn)備.
2號運動員:我需要281秒時間準(zhǔn)備.
4號運動員:我需要563秒時間準(zhǔn)備.
5號運動員:我需要916秒時間準(zhǔn)備.
3號運動員:我需要461秒時間準(zhǔn)備.
2號運動員:我已經(jīng)準(zhǔn)備完畢.
3號運動員:我已經(jīng)準(zhǔn)備完畢.
1號運動員:我已經(jīng)準(zhǔn)備完畢.
4號運動員:我已經(jīng)準(zhǔn)備完畢.
5號運動員:我已經(jīng)準(zhǔn)備完畢.
裁判:所有運動員準(zhǔn)備完畢,開始...
3號運動員:開跑...
2號運動員:開跑...
1號運動員:開跑...
4號運動員:開跑...
5號運動員:開跑...

Process finished with exit code 0

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

以上就是java并發(fā)編程專題(八)----(JUC)實例講解CountDownLatch的詳細(xì)內(nèi)容,更多關(guān)于java juc CountDownLatch的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 手把手教你設(shè)置IntelliJ IDEA 的彩色代碼主題的圖文教程

    手把手教你設(shè)置IntelliJ IDEA 的彩色代碼主題的圖文教程

    本文給出一系列 IntelliJ IDEA 代碼的彩色主題,感興趣的朋友一起看看吧
    2018-01-01
  • jdk8的datetime時間函數(shù)使用示例

    jdk8的datetime時間函數(shù)使用示例

    這篇文章主要介紹了jdk8的datetime時間函數(shù)使用示例,需要的朋友可以參考下
    2014-03-03
  • Java實現(xiàn)動態(tài)日歷效果

    Java實現(xiàn)動態(tài)日歷效果

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)動態(tài)日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳解Spring Security 中的四種權(quán)限控制方式

    詳解Spring Security 中的四種權(quán)限控制方式

    這篇文章主要介紹了詳解Spring Security 中的四種權(quán)限控制方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Spring Boot中自動執(zhí)行sql腳本的實現(xiàn)

    Spring Boot中自動執(zhí)行sql腳本的實現(xiàn)

    這篇文章主要介紹了Spring Boot中自動執(zhí)行sql腳本的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • SpringBoot特點之依賴管理和自動裝配(實例代碼)

    SpringBoot特點之依賴管理和自動裝配(實例代碼)

    在使用SpringBoot的時候,會自動將Bean裝配到IoC容器中,操作也很簡單,今天小編給大家介紹下SpringBoot特點之依賴管理和自動裝配的知識,感興趣的朋友一起看看吧
    2022-03-03
  • Java的Tomcat和Servlet的運行原理詳解

    Java的Tomcat和Servlet的運行原理詳解

    這篇文章主要為大家詳細(xì)介紹了Java的Tomcat和Servlet,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Spring開發(fā)中自定義注解的使用詳解

    Spring開發(fā)中自定義注解的使用詳解

    這篇文章主要介紹了Spring開發(fā)中自定義注解的使用詳解,在Java項目中,可以自定義注解,方便進(jìn)行某些處理操作,提供開發(fā)效率,需要的朋友可以參考下
    2024-01-01
  • Java接口異步調(diào)用

    Java接口異步調(diào)用

    這篇文章主要介紹了Java接口異步調(diào)用,下面我們來一起學(xué)習(xí)一下吧
    2019-05-05
  • 使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗分享

    使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗分享

    這篇文章主要介紹了使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗分享,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論

黄骅市| 千阳县| 军事| 东丽区| 邹平县| 镇安县| 招远市| 德阳市| 新野县| 宣化县| 浠水县| 平江县| 富锦市| 宜良县| 保靖县| 哈巴河县| 绩溪县| 茶陵县| 娱乐| 松阳县| 徐闻县| 自贡市| 屯门区| 孝义市| 泊头市| 休宁县| 湖北省| 民丰县| 房产| 布尔津县| 密山市| 建昌县| 北川| 孙吴县| 西城区| 高清| 大荔县| 蓝山县| 汶上县| 长治市| 巴楚县|