fork join语句_java forkjoinpool

fork join语句_java forkjoinpool借鉴大数据里分而治之的思想

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、什么是ForkJoin

大数据里面有map reduce ,Java从JDK1.7开始借鉴了这种分而治之的思想,提供ForkJoin框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果

Fork:把一个复杂任务进行分拆,大事化小
Join:把分拆任务的结果进行合并

二、3大类

2.1 ForkJoinPool
分支合并池 类比=> 线程池
在这里插入图片描述
2.2 ForkJoinTask
ForkJoinTask 类比=> FutureTask
在这里插入图片描述
2.3 RecursiveTask
递归任务:继承后可以实现递归(自己调自己)调用的任务
在这里插入图片描述

三、使用示例
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();
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191542.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机app抓包

    手机app抓包总是收到公司部分客户特定机型,情况下才出现的bug此类问题较为难以复现需要客户协助进行抓包处理,写一个简单教程方便与客户沟通!app下载地址链接:https://pan.baidu.com/s/1M8x8DsTy0pcgnGyKEsJ_Ow提取码:cd4i1.安装抓包软件2.进入错误页面的上一个页面如果B页面是出错的页面,点击A(页面或者按钮)进入到B页面那么我们就打开A页面就可以了3.选择需要抓包的应用4.抓取操作信息5.如果错误信息比较多点击.

    2022年5月29日
    34
  • 无语的准备关时_紧要关头

    无语的准备关时_紧要关头,却不能吹尽弯月沉没的忧伤。我,或许就是忘忧河上撑篙的船夫,孤舟、蓑衣、斗笠,在红尘中摆渡。拾一抹花瓣,从此潇湘谢却,钟声不继。可能真的是前生种下的孽缘,这一生,我们才会狭路相逢,然后,你悄悄偷走我的真爱难找。藕断何必丝连、情断何必怀念,当你离开我的瞬间我才知道你并没有那么的好。藕断何必丝连、情断何必怀念,当你离开我的瞬间我才知道良友虽多,但知己难寻。藕断何必丝连、情断何必怀念,当你离开我的瞬间你

    2022年10月24日
    0
  • 超级用户权限root_小米开发版root权限获取

    超级用户权限root_小米开发版root权限获取小米手机6X有没有办法开启ROOT超级权限?我们知道,安卓手机有ROOT超级权限,如果手机开启root相关权限,能够实现更好的功能,举例子,我们部门的营销部门,使用一些营销软件都需要在ROOT超级权限下执行,如果手机没办法获的root的权限,即没办法正常使用具体的功能。小米手机6X开发版系统自身拥有root权限管理工具,如果你使用的是小米手机6X稳定版,建议可以先将小米手机6X刷入开发版,再进…

    2022年10月31日
    0
  • lvs常用命令

    lvs常用命令lvs命令(具体参数的意思可以参看其他文章)1,查看配置ipvsadm-ln2,清空所有配置ipvsadm-Clistener添加:ipvsadm-A-t192.168.11.60:80-srr修改:ipvsadm-E-t192.168.11.60:80-swrr删除:ipvsadm-D-t192.168.11.60:80realserv…

    2022年7月23日
    21
  • ES7学习笔记(十三)GEO位置搜索

    ES7学习笔记(十三)GEO位置搜索

    2020年11月14日
    240
  • python表白代码大全简单-python告白代码,只属于程序员的浪漫

    python表白代码大全简单-python告白代码,只属于程序员的浪漫不知何时,不知何因,程序员这个行业成为大家茶余饭后取乐的无辜群体。只要说到程序员,脑海中就浮现出刻板印象,标配穿搭:格子衫,牛仔裤,黑框眼镜。当然秃顶也是必须的,更狠的吐槽还有邋里邋遢,不懂浪漫,不知人情世故!开始可能只是幽默玩笑,后面慢慢就越传越多,大家便信以为真!可是程序员真的是这样吗?随着现在编程这个行业的普遍高薪收入,程序员又成为大家关注的焦点,深入的了解后,发现程序员其实是很可爱的一个群…

    2022年6月2日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号