zoukankan      html  css  js  c++  java
  • 并发新构件之CountDownLatch

    CountDownLatch译为倒计时锁存器:JDK描述     ;允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。

    CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier 。

    典型用法1:某一线程运行前,等待其他N个线程运行完(countDown()方法被调用N次)。例如:司机(主线程)开车前,等待所有人(其他线程)上车,主线程在await(),其他线程执行coutndown()。

    典型用法2:实现多个线程开始执行任务的最大并行性。例如 裁判(主线程)开枪,多个运动员(其他线程)开跑,主线程执行countDown(),其他线程await()在等待;

    简单示例:

    package com.houjun.current.newClassBank;
    
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @Author: HouJun
     * @Date: 2019/10/17 8:50
     * @Description: 倒计时锁存器 简单例子,1实现多个线程开始执行任务的最大并行性。
     * @version: 1.0
     */
    public class TestCountDownLatch1 {
        public static void main(String[] args) throws InterruptedException {
            ExecutorService exec = Executors.newCachedThreadPool();
            CountDownLatch countDownLatch = new CountDownLatch(2);
            exec.execute(new Way(countDownLatch));
            exec.execute(new Way(countDownLatch));
            TimeUnit.SECONDS.sleep(10);
            countDownLatch.countDown();
            exec.shutdownNow();
        }
    }
    class Way implements Runnable{
        private CountDownLatch countDownLatch;
    
        public Way(CountDownLatch countDownLatch) {
            this.countDownLatch = countDownLatch;
        }
    
        @Override
        public void run() {
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("开始跑步");
        }
    }
  • 相关阅读:
    行转列(FOR XML PATH)
    非聚集索引的注意事项
    避免JS全局变量冲突
    如何做个好员工?
    SQL Server 执行计划中的扫描方式举例说明
    SqlServer with递归查询的使用
    Excel插件类库的设计思路
    使用log4javascript记录日志
    布局
    Image控件的简单使用示例1
  • 原文地址:https://www.cnblogs.com/houj/p/11690710.html
Copyright © 2011-2022 走看看