当前位置:主页 > java教程 > java利用CountDownLatch实现并行计算

实例讲解java怎样利用CountDownLatch实现并行计算

发布:2020-02-11 20:23:46 187


我们帮大家精选了Java相关的编程文章,网友贡芝英根据主题投稿了本篇教程内容,涉及到java、CountDownLatch、java利用CountDownLatch实现并行计算相关内容,已被377网友关注,相关难点技巧可以阅读下方的电子资料。

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语言中状态模式的优点

    发布:2023-03-31

    状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。这个模式将状态封装成独立的类,并将动作委托到 代表当前状态的对象,我们知道行为会随着内部状态而改变


  • Java Big Number操作BigInteger及BigDecimal类详解

    发布:2022-10-10

    为网友们分享了关于Java的教程,这篇文章主要为大家介绍了Java Big Number操作BigInteger及BigDecimal类详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • javascript自由编辑图片示例代码

    发布:2020-03-13

    这篇文章主要介绍了javascript实现自由编辑图片代码详解,在当下的的前端项目中,图片功能可以说是非常常见的,图片的展示、图片的裁剪编辑、图片的上传等,那么我们的项目便来了个需求


  • Java中集合关系图及常见操作分享

    发布:2020-02-11

    这篇文章主要为大家详细介绍了Java中集合关系图及常见操作,解析Java中的集合类型的继承关系图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • JAVA中通过自定义注解进行数据验证的方法

    发布:2022-09-23

    给大家整理一篇关于JAVA的教程,java 自定义注解验证可自己添加所需要的注解,下面这篇文章主要给大家介绍了关于JAVA中通过自定义注解进行数据验证的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴


  • java计算掷6面骰子6000次每个点数出现的概率代码实例

    发布:2020-05-13

    今天小编就为大家分享一篇关于掷6面骰子6000次每个点数出现的概率,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


  • Java日期时间字符串和毫秒相互转换的方法

    Java日期时间字符串和毫秒相互转换的方法

    发布:2023-01-10

    给大家整理了关于Java的教程,这篇文章主要为大家详细介绍了Java日期时间字符串和毫秒相互转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Rxjava+Retrofit+Okhttp进行网络访问及数据解析

    发布:2023-03-02

    这篇文章主要介绍了Rxjava+Retrofit+Okhttp进行网络访问及数据解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下


网友讨论