并发新构件之CountDownLatch
2024-10-01 10:37:09
CountDownLatch译为倒计时锁存器:JDK描述 ;允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。
A 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("开始跑步");
}
}
最新文章
- JUC学习笔记--Thread多线程基础
- 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)
- 练习3:修改withdraw 方法 练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。
- MSDN论坛被垃圾信息刷爆了!!!
- SQL中的内连接与外连接
- PostgreSQL trigger (function) examples
- No data in the view dba_hist_undostat (文档 ID 1558157.1)
- Excel导入数据(97--2003版本)的ExcelHelper
- Nunit单元测试的使用
- 丢失全部控制文件,noresetlogs重建控制文件,alter database open
- CF Error Correct System
- lua5.3调用C/C++
- 《高性能 JavaScript》读书笔记(一)
- jenkins 杀死衍生进程
- samba 基本配置及自定义控制
- 微信昵称有特殊符号怎么保存到mysql库里?
- 笔记-Android中打开各种格式的文件(apk、word、excel、ppt、pdf、音视频、图片等)
- MySQL表结构变更,不可不知的Metadata Lock
- SNF快速开发平台项目实践介绍
- Monitor Minio server with Prometheus