阿里面试题:100W个随机数求和,用多线程解

//用最短的时间计算出求和结果。
//输入:一个整数数组,里面有100W个整数
//输出:求和结果,求和使用的时间

class Caculate implements Runnable{
    int batchArr[];
    int start;
    int end;
    AtomicInteger batchSum;
    CountDownLatch cdh;
    public Caculate(int batchArr[], int start, int end, AtomicInteger batchSum, CountDownLatch cdh){
    };
    public void run(){
    // TODO 简单的累加就搞定
    }
}


public static void main(String[] args){
// 大数组分好组
// 线程分任务
// 线程计数到0,所有线程完成任务
// 累加一把
}

 

题主是个多线程白痴....请各位大佬

把这个框架补充完整

你将100W个整数平均分给每条线程去执行就行了

我TM试了,单线程最快。

package ask;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;

public class ArraySum {
	public static int getRandomNumberUsingNextInt(int min, int max) {
		Random random = new Random();
		return random.nextInt(max - min) + min;
	}

	public static int calc(int[] arr1, int[] arr2) throws ExecutionException, InterruptedException {
		var executor = ForkJoinPool.commonPool();
		var f1 = executor.submit(() -> Arrays.stream(arr1).sum());
		var f2 = executor.submit(() -> Arrays.stream(arr2).sum());
		return f1.get() + f2.get();
	}

	public static void main(String[] args) {
		int[] arr = new int[1000000];
		BigInteger sum = new BigInteger("0");

		for (int i = 0; i < 1000000; i++) {
			arr[i] = getRandomNumberUsingNextInt(0, 10);

			sum = sum.add(new BigInteger(String.valueOf(arr[i])));

		}
		System.out.println("Sum on Main Thread= " + sum);
		int[] arr1 = Arrays.copyOfRange(arr, 0, 500000);
		System.out.println(arr1.length);
		int[] arr2 = Arrays.copyOfRange(arr, 500000, 1000000);
		System.out.println(arr2.length);

		try {
			System.out.println(calc(arr1, arr2));
		} catch (ExecutionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y