zoukankan      html  css  js  c++  java
  • 利用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中的匿名内部类总结
    (转)NIO与AIO,同步/异步,阻塞/非阻塞
    (转)也谈BIO | NIO | AIO (Java版)
    socket Bio demo
    (转)socket Aio demo
    (转)深入理解Java的接口和抽象类
    (转)Java:类与继承
    (转)Java中的static关键字解析
    (转)java字节流和字符流的区别
    (整理)MyBatis入门教程(一)
  • 原文地址:https://www.cnblogs.com/ppcoder/p/9790922.html
Copyright © 2011-2022 走看看