1. 程式人生 > >利用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); } }