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);
        }
    }
  • 相关阅读:
    Delphi常用内存管理函数
    delphi中VirtualStringTree树使用方法
    Delphi常量
    delphi中的copy函数和pos函数
    delphi 中 delete的用法
    字软元件和位软元件的区别
    Virtual Treeview使用要点
    QTreeWidget搜索功能---遍历QTreeWidget
    C 语言使用 sqlite3
    opendir 与 readdir
  • 原文地址:https://www.cnblogs.com/ppcoder/p/9790922.html
Copyright © 2011-2022 走看看