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("开始跑步");
}
}

最新文章

  1. JUC学习笔记--Thread多线程基础
  2. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)
  3. 练习3:修改withdraw 方法 练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。
  4. MSDN论坛被垃圾信息刷爆了!!!
  5. SQL中的内连接与外连接
  6. PostgreSQL trigger (function) examples
  7. No data in the view dba_hist_undostat (文档 ID 1558157.1)
  8. Excel导入数据(97--2003版本)的ExcelHelper
  9. Nunit单元测试的使用
  10. 丢失全部控制文件,noresetlogs重建控制文件,alter database open
  11. CF Error Correct System
  12. lua5.3调用C/C++
  13. 《高性能 JavaScript》读书笔记(一)
  14. jenkins 杀死衍生进程
  15. samba 基本配置及自定义控制
  16. 微信昵称有特殊符号怎么保存到mysql库里?
  17. 笔记-Android中打开各种格式的文件(apk、word、excel、ppt、pdf、音视频、图片等)
  18. MySQL表结构变更,不可不知的Metadata Lock
  19. SNF快速开发平台项目实践介绍
  20. Monitor Minio server with Prometheus

热门文章

  1. 如何从 if-else 的参数校验中解放出来?
  2. (1)jsoncpp库的使用
  3. java架构之路-(源码)mybatis基本使用
  4. Net基础篇_学习笔记_第十一天_面向对象(静态与非静态 static)
  5. js 手机号码正则表达式
  6. 05 (OC) 二叉树 深度优先遍历和广度优先遍历
  7. iOS上架的整体流程和建议
  8. Spring Boot 的单元测试和集成测试
  9. mybatis 插件的原理-责任链和动态代理的体现
  10. Spark Streaming 入门