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("开始跑步");
        }
    }
  • 相关阅读:
    Dobbo
    Redis
    Sql语句模糊查询字符串的两种写法
    Python——labelImg安装
    Python——numpy中的 sum 函数
    Python——pymysql 操作数据库
    Axure RP9 授权码和密钥
    更改 pip install 默认安装依赖的路径(转载)
    pip 升级或者安装拓展包时遇见的问题
    在Windows命令行中编译运行C/C++程序(转载)
  • 原文地址:https://www.cnblogs.com/houj/p/11690710.html
Copyright © 2011-2022 走看看