一、原理

Fork:把一个复杂任务进行分拆,大事化小

Join:把分拆任务的结果进行合并

ForkJoinPool

分支合并池    类比=>   线程池

ForkJoinTask

ForkJoinTask    类比=>   FutureTask

RecursiveTask

递归任务:继承后可以实现递归(自己调自己)调用的任务

 class Fibonacci extends RecursiveTask<Integer> {
   final int n;
   Fibonacci(int n) { this.n = n; }
   Integer compute() {
     if (n <= 1)
       return n;
     Fibonacci f1 = new Fibonacci(n - 1);
     f1.fork();
     Fibonacci f2 = new Fibonacci(n - 2);
     return f2.compute() + f1.join();
   }
 }
//代码

import  java.util.concurrent.ExecutionException;


import  java.util.concurrent.ForkJoinPool;


import  java.util.concurrent.ForkJoinTask;

import  java.util.concurrent.RecursiveTask;


class  MyTask  extends  RecursiveTask<Integer>{

     private static final  Integer  ADJUST_VALUE  =  10 ;

     private int  begin ;

     private int  end ;

     private int  result ;


     public  MyTask( int  begin,  int  end) {

         this . begin  = begin;

         this . end  = end;

    }


     @Override

     protected  Integer compute() {

         if (( end  -  begin )<= ADJUST_VALUE ){

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

                 result  =  result  + i;

           }

        } else {

             int  middle = ( begin  +  end )/ 2 ;

            MyTask task01 =  new  MyTask( begin ,middle);

            MyTask task02 =  new  MyTask(middle+ 1 , end );

            task01.fork();

            task02.fork();

            result  =  task01.join() + task02.join();

        }



         return  result ;

    }
}


 /**
 * 分支合并例子
 * ForkJoinPool
 * ForkJoinTask
 * RecursiveTask
 */
 public class  ForkJoinDemo {


     public static void  main(String[] args)  throws  ExecutionException, InterruptedException {
        MyTask myTask =  new  MyTask( 0 , 100 );

        ForkJoinPool forkJoinPool =  new  ForkJoinPool();

        ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(myTask);


        System. out .println(forkJoinTask.get());


        forkJoinPool.shutdown();

    }
}

JUC-分支合并框架的更多相关文章

  1. ForkJoinPool 分支/合并框架

    ForkJoinPool 分支/合并框架 一.Fork/Join框架简介 Fork/Join 框架就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小 ...

  2. 11.ForkJoinPool 分支/合并框架 (工作窃取)

    /*ForkJoinPool 分支/合并框架 (工作窃取)*/ Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork) 成若干个小任务(拆到给出的临界值为止),再将一个个的小 ...

  3. ForkJoinPool分支合并框架-工作窃取

    Fork/Join 框架 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成 若干个小任务(拆到不可再拆时), 再将一个个的小任务运算的结果进行 join 汇总 For ...

  4. java多线程 -- ForkJoinPool 分支/ 合并框架 工作窃取

    Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总. Fork/Join 框架与线程池的 ...

  5. ForkJoinPool分支/合并框架工程使用的工作窃取

    ForkJoinPool分支/合并框架 在必要的情况下,讲一个大任务,进行拆分(fork)成若干个小任务(拆到不可拆为止),再将一个个小的任务运算的结果进行join汇总. 工作窃取的背景 分支/合并框 ...

  6. 【JUC】JUC线程池框架综述

    一.前言 在分析完了JUC的锁和集合框架后,下面进入JUC线程池框架的分析,下面给出JUC线程池的总体框架,之后再逐一进行分析. 二.JUC线程池框架图 说明:从上图可知,JUC线程池框架中的其他接口 ...

  7. 分支合并git checkout adview git merge adview3

    分支合并 git checkout adview git merge adview3

  8. (转)SVN分支/合并原理及最佳实践

    先说说什么是branch.按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰t ...

  9. ECLIPSE下SVN的创建分支/合并/切换使用

    最近接项目要求,要在svn主干上创建分支,用分支来进行程序的bug修改,而主干上进行新功能的开发.分支上的bug修改完,发布后,可以合并到主干上.项目程序可以在主干和分支之间进行切换,来实现主干和分支 ...

  10. Git 分支合并

    理解核心 Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的. 在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点 分支合 ...

随机推荐

  1. Win10多用户同时登陆远程桌面

    想记录一下最近解决的一些问题,发现还是博客最合适,虽然之前从来没写过,希望以后能养成这个好习惯. 家里有一台台式机装着Win10,还有一台macbook,平时遇到需要用Win系统又不想坐在书桌前时,我 ...

  2. 为什么我用Ipad Pro做电子笔记和看PDF电子书

    为什么我用Ipad Pro做电子笔记和看PDF电子书 Ipad做笔记的优点: 1.ipad整理的笔记可以随时修改,可以看PDF的书,2.纸质书很重携带不便3.ipad的可通过关键词搜索笔记内容 4.笔 ...

  3. app简单压力测试

    step1:手机开发者选项中,将USB调试选上 step2:确认手机和电脑已经连接成功:adb devices step3:安装测试app:adb install package.apk (1)cd命 ...

  4. Java 8 Stream Api 中的 peek 操作

    1. 前言 我在Java8 Stream API 详细使用指南[1] 中讲述了 [Java 8 Stream API]( "Java 8 Stream API") 中 map 操作 ...

  5. 数组工具Array的基本使用

    /* * Arrays数组工具的基本使用 */import java.util.Arrays; public class Day02_03 {    public static void main(S ...

  6. nvm,nrm和yarn

    nvm Node Version Management nvm list 查看所有已安装的 node 版本 nvm install 版本号 安装指定版本的 node nvm use 版本号 切换到指定 ...

  7. Spring-Framework-官方文档阅读(一)Spring IoC Container

    通读Spring IoC容器官方文档,对IoC容器有一个大致的了解. 环境 JDK1.8 Spring Framework Version :4.3.18.RELEASE 容器概述 接口org.spr ...

  8. 在生产环境中碰见的JSP木马-sunziren

    写在前面,本文仅做为技术交流的用途,请不要使用本文中的技术破坏他人的网站及系统,因为这是违法的!!!本人不负任何法律责任!!! 19年1月份,发现了一个JSP木马文件,当时觉得有点奇怪的是,这个文件没 ...

  9. Java第五节课总结

    继承是对现实生活中的“分类”概念的一种模拟. 通过surper调用的基类构造方法,必须是子类构造方法中的第一个语句. 构造函数(constructor)是一种特殊的方法 .主要用来在创建对象时初始化对 ...

  10. FirstJavaWeb

    (未完成)出错有点多,Tomcat的配置也出问题了,Tomcat突然找不到jdk了,好像是我之前下载过一回然后没卸干净有残留文件,还有连接数据库的代码也有问题.       <%@page im ...