目录
一、CountDownLatch的理解
- 一、CountDownLatch的理解
- 二、CountDownLatch类中常用方法
- 三、CountDownLatch类代码示例
- CountDownLatch属于java.util.concurrent包下;
- CountDownLatch类使一个线程等待其他线程各自执行完毕后再执行;
- 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。
- void await() 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
- countDown() 递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
1、示例场景
* 多个线程执行,每个线程计算文件中每行数据的总和
* 汇总线程等待多个线程计算出结果后,在把所有结果进行汇总求和
* 例如:线程0计算第一行数据值的和,
* 线程1计算第二行数据值的和,
* 线程2计算第三行数据值的和,
* 汇总线程把线程0、线程1、线程2分别计算出的总和进行汇总求和
* 文件指:在D盘创建test.txt文件,文件内容如下:
* 13, 56, 123, 49, 89
* 59,20,18,34,56,103
* 123,342,56,78,68,84,99,28
2、代码示例
package com.xz.thread.CountDownLatch;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
* @description: 多个线程执行,每个线程计算文件中每行数据的总和
* 汇总线程等待多个线程计算出结果后,在把所有结果进行汇总求和
* 例如:线程0计算第一行数据值的和,
* 线程1计算第二行数据值的和,
* 线程2计算第三行数据值的和,
* 在D盘创建test.txt文件,文件内容如下:
* 13, 56, 123, 49, 89
* 59,20,18,34,56,103
* 123,342,56,78,68,84,99,28
* @author: xz
* @create: 2021-05-30 15:33
*/
public class Demo {
//定义一个数组
private int[] arrs;
//构造方法,传入文件内容的行数为参数,有几行数据就声明多大的数组
public Demo(int line){
arrs =new int[line];
}
/**
* 计算方法(每行数据的值求和)
*/
public void calculate(String line,int index,CountDownLatch latch){
//用逗号切分每一个值
String[] split = line.split(",");
//遍历求每行的数据总和
int sum=0;
for(String str:split){
sum += Integer.parseInt(str);
}
//每行的数据总和赋值到声明的arrs数组中指定位置
arrs[index] = sum;
System.out.println(Thread.currentThread().getName()+" 执行计算任务-------"+line+" 结果="+sum);
latch.countDown();//递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
}
/**
* 每行数据的和相加,求出总和
*/
public void totalSum(){
System.out.println("汇总线程【开始执行】========");
int total=0;
for(int i=0;i
关注
打赏
热门博文
- Netty—— 概念剖析(NIO vs BIO)
- Netty——网络编程 NIO(Selector处理accept事件)代码示例
- CompletableFuture异步编排(多任务组合)
- CompletableFuture异步编排(两任务组合——两个任务必须都完成才触发另一个任务 )
- CompletableFuture异步编排(线程串行化代码示例)
- CompletableFuture异步编排(handle最终处理)
- CompletableFuture异步编排(计算完成回调代码示例)
- hutool工具导出excel代码示例
- CompletableFuture异步编排(开启异步编程代码示例)
- java 获取音频、视频文件时长代码示例