zoukankan      html  css  js  c++  java
  • java并发框架--Fork-Join

    并行计算


    Fork-Join

    关键类

    例子

    ``` package sumTest2; /** * 计算1-10000000的和 * 适用范围:计算不知道计算量大小的计算 */ import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask;

    public class SumTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
    ForkJoinPool pool = new ForkJoinPool();

        SumTask task = new SumTask(1,10000000);//大任务
    
        ForkJoinTask<Long> result = pool.submit(task);
    
        //等待结果
    
        do {
            System.out.printf("Main: Thread Count: %d
    ",pool.getActiveThreadCount());//正在运行的线程
            System.out.printf("Main: Paralelism: %d
    ",pool.getParallelism());//并行度
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } while (!task.isDone());
        System.out.println(result.get().toString());
    }
    

    }

    ```java
    package sumTest2;
    
    import java.util.concurrent.RecursiveTask;
    //继承这个可以自动递归
    public class SumTask extends RecursiveTask<Long> {
    
        private int start;
        private int end;
    
        public SumTask(int start, int end) {
            this.start = start;
            this.end = end;
        }
        public static final int  Max= 5;
    
        @Override
        protected Long compute() {
            Long sum = 0L;
            boolean canCompute = (end - start)<= Max;
            if (canCompute){
                for (int i = start; i <= end; i++){
                    sum += i;
                }
            }else{
                int middle = (end + start) / 2;
                SumTask subTask1 = new SumTask(start, middle);
                SumTask subTask2 = new SumTask(middle+1, end);
    
                //invokeAll(subTask1, subTask2);
                subTask1.fork();
                subTask2.fork();
                Long sum1 = subTask1.join();
                Long sum2 = subTask2.join();
                sum = sum1 + sum2;
            }
            return sum;
        }
    }
    
    
    不一样的烟火
  • 相关阅读:
    [转]使用Composer管理PHP依赖关系
    Php环境下载(PHPNow)安装
    精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具
    八款强大的jQuery图片滑块动画插件
    JavaScript prototype.js提升JavaScript开发效率
    JS Message 网页消息提醒
    Vis.js图表插件
    动态算法学习
    GPS功能:百度路书自定义【轨迹回放】
    CSS美化页面滚动条
  • 原文地址:https://www.cnblogs.com/cstdio1/p/12259652.html
Copyright © 2011-2022 走看看