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);
}
}