java利用CountDownLatch实现并行计算
时间:2018-10-15
这篇文章主要介绍了java利用CountDownLatch实现并行计算,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了利用CountDownLatch实现并行计算的具体代码,供大家参考,具体内容如下
import java.util.concurrent.CountDownLatch; /** * @Author pipi * @Date 2018/10/15 13:56 **/ public class ParallelComputing { private int[] nums; private String[] info; private CountDownLatch countDownLatch; public ParallelComputing(String[] info) { this.info = info; int size = info.length; nums = new int[size]; this.countDownLatch = new CountDownLatch(size); } public void calc(String line, int index) throws InterruptedException { String[] numbers = line.split(","); int total = 0; for (String num : numbers) { total += Integer.parseInt(num); } Thread.sleep(5000); nums[index] = total; countDownLatch.countDown(); System.out.println(Thread.currentThread().getName() + "执行计算任务..." + line + ",结果为:" + total); } public void sum() { System.out.println("汇总线程开始执行..."); int total = 0; for (int i : nums) { total += i; } System.out.println("汇总线程结束执行...结果为:" + total); } public void calcSum() throws InterruptedException { int size = info.length; for (int i = 0; i < size; i++) { final int j = i; new Thread(() -> { try { calc(info[j], j); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); } countDownLatch.await(); sum(); } public static void main(String[] args) throws InterruptedException { long start = System.currentTimeMillis(); String[] info = { "2,22", "3,33", "232,32,76,84", "99,45,1" }; ParallelComputing parallelComputing = new ParallelComputing(info); parallelComputing.calcSum(); long end = System.currentTimeMillis(); System.out.println(end - start); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- python自制有声小说
- CVE-2017-8570及利用样本分析
- “既生 ExecutorService, 何生 CompletionService?”
- XXE -XML External Entity
- Vivado时序收敛技术(一) Baseline基础理论
- ShardingJdbc分库分表实战案例解析(上)
- ShaderDesigner:OpenGL shader调试神器
- 手动实现Promise/A+
- GJK算法计算凸多边形之间的距离
- 通过实际案例摸清楚Spring事务传播的行为
- 如何通过容器搭建稳定可靠的私有网盘(NextCloud)
- 初识ABP vNext(1):开篇计划&基础知识
- 基于 HTML5 Canvas 的病毒模拟视觉试验台
- #云开发高阶实战任务总结# 投票系统的解析与设计
- K8S 环境下的使用 ConfigMap 进行远程配置