zoukankan      html  css  js  c++  java
  • CountDownLatch闭锁

    CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

    闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:

    • 确保某个计算在其需要的所有资源都被初始化之后才继续执行;
    • 确保某个服务在其依赖的所有其他服务都已经启动之后才启动;
    • 等待直到某个操作所有参与者都准备就绪再继续执行。

    下面可以通过一段代码来更好地理解CountDownLatch。

     1 package com.ccfdod.juc;
     2 
     3 import java.util.concurrent.CountDownLatch;
     4 
     5 /**
     6  * CountDownLatch:闭锁,在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才继续执行
     7  */
     8 public class TestCountDownLatch {
     9 
    10     public static void main(String[] args) {
    11         final CountDownLatch latch = new CountDownLatch(5);
    12         LatchDemo ld = new LatchDemo(latch);
    13         
    14         long start = System.currentTimeMillis();
    15         //这里如果i<8(大于5的数,5对应new CountDownLatch(5)),那么在在至少5个线程完成后,执行打印耗费时间语句
    16         for(int i=0; i<5; i++) {
    17             new Thread(ld).start();
    18         }
    19         try {
    20             latch.await();
    21         } catch (InterruptedException e) {
    22             
    23         }
    24         long end = System.currentTimeMillis();
    25         System.out.println("好费时间为:" + (end - start));
    26     }
    27 }
    28 
    29 class LatchDemo implements Runnable {
    30     private CountDownLatch latch;
    31     
    32     public LatchDemo(CountDownLatch latch) {
    33         this.latch = latch;
    34     }
    35 
    36     @Override
    37     public void run() {
    38         try {
    39             for (int i = 0; i < 200; i++) {
    40                 if (i % 2 == 0) {
    41                     System.out.println(i);
    42                 }
    43             }
    44         } finally {
    45             //在finally中保证一定能够执行
    46             latch.countDown();
    47         }
    48     }
    49 }
  • 相关阅读:
    【Vue】 修饰符sync
    【VUE】vue路由跳转的方式
    【Element】elementui的Cascader 级联选择器,在懒加载的时候数据无法回显的解决方案
    【ES6】利用ES6 Set 将数组去重
    【.NETCORE】Refit 框架
    【.NETCORE】ASP.NET Core SignalR
    【Visual Studio Code】驼峰翻译助手
    VueX(Vue状态管理模式)
    hdmi 随笔
    ad 差分布线 等长布线
  • 原文地址:https://www.cnblogs.com/ccfdod/p/6395995.html
Copyright © 2011-2022 走看看