zoukankan      html  css  js  c++  java
  • 代码性能提升10倍(ForkJoin)

    package com.lyl.test;
    
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.Random;
    import java.util.concurrent.ForkJoinPool;
    import java.util.concurrent.RecursiveTask;
    
    /**
     * @Auther: lyl
     * @Date: 2020/03/31 11:06
     * @Description:
     */
    public class Test6 {
        int[] nums = new int[10_000_0000];
        int CI = 10;//计算多少次
        Random r = new Random();
    
        public Test6() {
            for (int i = 0; i < nums.length; i++) {
                nums[i] = r.nextInt(10);
            }
        }
    
        public static void main(String[] args) throws IOException {
    //        Arrays.stream(new int[3]).sum();//初始化sum内部排除初始化时间
    
            Test6 t = new Test6();
            t.aa();
            t.bb();
            t.cc();
        }
    
        public void aa() {
    
    
            long start = System.currentTimeMillis();
            long n = 0;
            for(int i = 0; i< CI; i++) {
                n = Arrays.stream(nums).sum();
            }
            long end = System.currentTimeMillis();
            System.out.println("aa|"+ (end - start )+ "ms|" + n);
        }
    
        public void bb() {
            long start = System.currentTimeMillis();
            long n = 0;
            for(int j = 0; j< CI; j++) {
                n = 0;
                for (int i = 0; i < nums.length; i++) {
                    n += nums[i];
                }
            }
    
            long end = System.currentTimeMillis();
            System.out.println("bb|"+ (end - start )+ "ms|" + n);
        }
    
    
        public void cc() throws IOException {
            Long invoke = 0L;
            ForkJoinPool pool = new ForkJoinPool();
            AddTask task = new AddTask(0,nums.length);
            long start = System.currentTimeMillis();
            for(int j = 0; j< CI; j++) {
    //            pool.execute(task);
                invoke = pool.invoke(task);
            }
    
    //        long s = task.join();
            long end = System.currentTimeMillis();
    
            System.out.println("cc|"+ (end - start )+ "ms|" + invoke);
            System.in.read();
        }
    
        class AddTask extends RecursiveTask<Long> {
    
            int start;
            int end;
    
            public AddTask(int s,int e){
                this.start = s;
                this.end = e;
            }
    
            @Override
            protected Long compute() {
    
                if(end - start <= 50000){
                    long sum = 0L;
                    for(int i = start;i< end ;i++){
                        sum += nums[i];
    
                    }
                    return sum;
                }
                int m = start +(end-start)/2;
    
                AddTask sub1 = new AddTask(start,m);
                AddTask sub2 = new AddTask(m,end);
                sub1.fork();
                sub2.fork();
    
                return sub1.join()+sub2.join();
    
            }
        }
    }

  • 相关阅读:
    jmeter上做分布压测
    jpg,jpeg,bmp,png,gif图片格式区别
    jmeter的命令行进行压力测试
    Java8新特性
    02-Git
    01-Maven
    Java-集合
    Java-I/O框架
    mongodb安装配置
    Nginx常见错误及处理方法
  • 原文地址:https://www.cnblogs.com/liaoyanglong/p/12603801.html
Copyright © 2011-2022 走看看