首页 > 编程语言 >JAVA使用ForkJoinPool实现子任务拆分进行数值累加代码示例

JAVA使用ForkJoinPool实现子任务拆分进行数值累加代码示例

时间:2024-06-02 16:55:47浏览次数:24  
标签:begin JAVA 示例 int SumTask ForkJoinPool 累加 end

 

 

SumTask.java

import java.util.concurrent.RecursiveTask;

/**
 * 定义任务和拆分逻辑
 * RecursiveTask<Long> 这个是 有返回值的
 * 如果不需要返回值可以用 RecursiveAction
 */
public class SumTask extends RecursiveTask<Long> {

    /**
     * 累加的开始值
     */
    private int begin;

    /**
     * 累加的结束值
     */
    private int end;


    public SumTask(int begin, int end) {
        this.begin = begin;
        this.end = end;
    }

    @Override
    protected Long compute() {
        long sum = 0;

        if (end - begin < 100) {
            //如果两个数值小于100,就不要继续拆分了 直接相加就行
            for (int i = begin; i <= end; i++) {
                sum += i;
            }
            return sum;

        } else {
            //如果大于100继续拆分 取中间数拆分
            int middle = (begin + end) / 2;

            SumTask sumTask1 = new SumTask(begin, middle);
            SumTask sumTask2 = new SumTask(middle + 1, end);

            //分别执行子任务
            sumTask1.fork();
            sumTask2.fork();

            //取出子任务执行的结果
            Long sum1 = sumTask1.join();
            Long sum2 = sumTask2.join();

            //相加
            return sum1 + sum2;

        }

    }
}

 

 

使用

public static void main(String[] args)  {
        ForkJoinPool pool=new ForkJoinPool(4);

        SumTask sumTask=new SumTask(1,10000);

        Long sum = pool.invoke(sumTask);
        System.out.println(sum);
    }

 

标签:begin,JAVA,示例,int,SumTask,ForkJoinPool,累加,end
From: https://www.cnblogs.com/pxblog/p/18227297

相关文章

  • JAVA SMTP例子
    一、SimpleMailSender.javapackageorg.fh.util.mail;importjava.util.Date;importjava.util.Properties;importjavax.mail.Address;importjavax.mail.BodyPart;importjavax.mail.Message;importjavax.mail.Multipart;importjavax.mail.Session;importjavax......
  • 《java数据结构》--哈希表
    ......
  • 【JavaEE 进阶(二)】Spring MVC(下)
    ❣博主主页:33的博客❣▶️文章专栏分类:JavaEE◀️......
  • 《Java开发及前端最全面试题-Offer直通车》目录
    Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精......
  • 适合技术小白学习的项目1863java在线视频网站系统 Myeclipse开发mysql数据库web结构ja
    一、源码特点java在线视频网站系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。java在线视频......
  • 适合技术小白学习的项目1840java swing社团管理系统myeclipse开发Mysql数据库CS结构ja
    一、源码特点   javaswing社团管理系统是一套完善的窗体设计系统,对理解SWINGjava编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。应用技术:java+mysql开发工具:Myeclipse8.5、jdk。二、功能介绍社团管理系统要满足以下几个方面的功能需求......
  • Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式 (尼恩)电子版百度云
    书获取链接:python33  。c o  m我的阅读笔记:多线程:介绍Java多线程的基础概念,如线程的创建、启动、状态转换、线程间通信等。锁:深入探讨Java中的各种锁机制,包括内置锁(synchronized)、ReentrantLock、ReadWriteLock等,以及它们的使用场景和性能特点。Java内存模型(JMM):解释J......
  • (已校对)Java 8实战 (Raoul-Gabriel Urma, Mario Fusco, Alan Mycroft)电子版百度云
    书:pan.baidu.com/s/1CmARX6a65pfh-ZhLpKjv-Q?pwd=bqij提取码:bqij阅读笔记:Lambda表达式:介绍Lambda表达式的语法和用法,以及如何在Java8中使用它们简化匿名内部类的使用。函数式接口:解释函数式接口的概念,包括@FunctionalInterface注解的使用和Java标准库中的函数式接口,如Predi......
  • java中的异常
    目录一、异常的分类ExceptionError二、异常的处理方式一、异常的分类Throwable类表示可抛,是所有异常和错误的超类,两个直接的子类为Exception和Error,分别表示错误和异常,其中异常分为两类,一类是非运行时异常,一类是运行时异常(非受检异常)Exception程序本身可以处理的异常,对于这......
  • java中的泛型
    目录一、定义二、使用语法三、注意事项四、从泛型类派生子类情况一情况二五、泛型接口语法接口的使用一、定义class类名<泛型标识1,泛型标识2,…>{ private泛型标识1变量名;}常用的泛型标识:T,E,K,V二、使用语法类名<具体的数据类型>对象名=new类名<具体的数据类型......