一千万个数高效求和
前言 今天看到了一道面试题 一千万个数,如何高效求和? 看到这个题中的“高效求和”,第一反应想到了JDK1.8提供的 LongAdder 类的设计思想,就是 分段求和再汇总 。也就是开启多个线程,每个线程负责计算一部分,所以线程都计算完成后再汇总。整个过程大致如下: 思路已经有了,接下来就开始愉快的编码吧 测试环境 win10系统 4核4线程CPU JDK1.8 com.google.guava.guava-25.1-jre.jar lombok 实例 由于题目对一千万个数没有明确定义是什么数,所以暂定为int类型的 随机数 。为了对比效率,博主实现了 单线程版本 和 多线程版本 ,看看多线程到底有多高效。 单线程版本 单线程累加一千万个数,代码比较简单,直接给出 /** * 单线程的方式累加 * @param arr 一千万个随机数 */ public static int singleThreadSum(int[] arr) { long start = System.currentTimeMillis(); int sum = 0; int length = arr.length; for (int i = 0; i < length; i++) { sum += arr[i]; } long end = System.currentTimeMillis(); log