美文网首页
利用java的fork/join框架计算1000万个数的和

利用java的fork/join框架计算1000万个数的和

作者: 无羡爱诗诗 | 来源:发表于2020-12-27 14:30 被阅读0次

    java编程中,如何高效计算1000万个数的相加?

    代码实现及测试如下:

    private class SumTask extends RecursiveTask<Long> {

        private static final int THRESHOLD = 1250000;

        private long arr[];

        private int start;

        private int end;

        public SumTask(long[] arr, int start, int end) {

            this.arr = arr;

            this.start = start;

            this.end = end;

        }

        /**

        * 小计

        */

        private long subtotal() {

            long sum = 0;

            for (int i = start; i < end; i++) {

                sum += arr[i];

            }

            return sum;

        }

        @Override

        protected Long compute() {

            if ((end - start) <= THRESHOLD) {

                return subtotal();

            }else {

                int middle = (start + end) / 2;

                SumTask left = new SumTask(arr, start, middle);

                SumTask right = new SumTask(arr, middle, end);

                left.fork();

                right.fork();

                return left.join() + right.join();

            }

        }

    }

    public static void main(String[] args) throws ExecutionException, InterruptedException{

        int num = Runtime.getRuntime().availableProcessors();

        long time = System.currentTimeMillis();

        long[] arr = new long[10000000];

        for (int i =0 ; i < 10000000; i++) {

            arr[i] =i+1;

        }

        ForkJoinPool pool = new ForkJoinPool();

        ForkJoinTask<Long> result = pool.submit(new ForkJoinTest().new SumTask(arr, 0, arr.length));

        System.out.println("最终计算结果: " + result.invoke()+"耗时:"+(System.currentTimeMillis() - time)+",毫秒");

        pool.shutdown();

    }

    测试结果:

    使用的cpu内核数量: 4 最终计算结果: 50000005000000耗时:193,毫秒

    遍历数组 利用等差数列求和公式

    我发现算法的力量也很重要,最后一种是因为被求和的数组的数据是有规律的,刚好符合等差数列的特征!

    相关文章

      网友评论

          本文标题:利用java的fork/join框架计算1000万个数的和

          本文链接:https://www.haomeiwen.com/subject/xtyonktx.html