目录
一、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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?