浅谈ForkJoin

浅谈ForkJoin文章目录一 ForkJoin 是什么 它能用来实现什么功能 二 ForkJoin 的实现原理三 ForkJoin 的简单使用一 ForkJoin 是什么 它能用来实现什么功能 二 ForkJoin 的实现原理三 ForkJoin 的简单使用在这里插入代码片


一、ForkJoin是什么?它能用来实现什么功能?

ForkJoin也是一种线程池,只不过ForkJoin是专为CPU密集型任务而建立的线程池,它能大大提高CPU密集型任务的执行效率。

二、ForkJoin的实现原理

三、ForkJoin的简单使用

package com.muyichen.demo.forkjoin; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; import java.util.concurrent.RecursiveTask; @Slf4j public class ForkJoinExample extends RecursiveTask<Integer> { 
     public static final int threshold = 2; private int start; private int end; public ForkJoinExample(int start, int end) { 
     this.start = start; this.end = end; } @Override protected Integer compute() { 
     int sum = 0; //如果任务足够小就计算任务 boolean canCompute = (end - start) <= threshold; if (canCompute) { 
     for (int i = start; i <= end; i++) { 
     sum += i; } } else { 
     // 如果任务大于阈值,就分裂成两个子任务计算 int middle = (start + end) / 2; ForkJoinExample leftTask = new ForkJoinExample(start, middle); ForkJoinExample rightTask = new ForkJoinExample(middle + 1, end); // 执行子任务 leftTask.fork(); rightTask.fork(); // 等待任务执行结束合并其结果 int leftResult = leftTask.join(); int rightResult = rightTask.join(); // 合并子任务 sum = leftResult + rightResult; } return sum; } public static void main(String[] args) { 
     ForkJoinPool forkjoinPool = new ForkJoinPool(); //生成一个计算任务,计算1加到100 ForkJoinExample task = new ForkJoinExample(1, 100); //执行一个任务 Future<Integer> result = forkjoinPool.submit(task); try { 
     log.info("result:{}", result.get()); } catch (Exception e) { 
     log.error("exception", e); } } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2026年2月10日 上午10:01
下一篇 2026年2月10日 上午10:22


相关推荐

  • 《剑指offer》– 栈的压入与弹出序列、把字符串转化为整数、扑克牌顺子、孩子们的游戏(圆圈中最后剩下的数)

    《剑指offer》– 栈的压入与弹出序列、把字符串转化为整数、扑克牌顺子、孩子们的游戏(圆圈中最后剩下的数)

    2021年10月3日
    41
  • 什么是纯函数?

    什么是纯函数?纯函数的概念 一个函数的返回结果只依赖其参数 并且执行过程中没有副作用 下面我们来分别说明一下概念中的两个条件 返回结果只依赖其参数返回值只和函数参数有关 与外部无关 无论外部发生什么样的变化 函数的返回值都不会改变 非纯函数返回值与 a 相关 无法预料 consta 1constfoo b gt a bfoo 2

    2026年3月16日
    2
  • 复杂网络综述

    复杂网络综述本人毕业设计是关于复杂网络的 之前完全没听说过的概念 于是就在网上找了一些论文来看 顺便做下笔记 这篇文章主要讲了复杂网络的一些基础概述 这里的网络不是 不仅仅是 计算机网络这门课中的网络 它表示的是任何一个可以用节点和节点之间连线来代表的一个系统 如 神经系统可以看做是大量神经细胞通过神经纤维相互连接形成的网络 拓扑结构拓扑结构就是们把网络不依赖于节点的具体位置和边的具体形态就能

    2026年3月18日
    2
  • 第二章:activiti工作流连接数据库,和eclipse安装activiti插件

    第二章:activiti工作流连接数据库,和eclipse安装activiti插件第二章:activiti工作流连接数据库,和eclipse安装activiti插件

    2022年4月23日
    56
  • 灰度测试与AB测试_测试种类有哪些

    灰度测试与AB测试_测试种类有哪些这个“常见”,是说当我们经历多了之后,会发现这个概念其实很常见,在当前你所处的这个人群中,发现大家都挂在嘴上。在最开始的测试学习中,其实很少提到这些概念,在职业生涯的前期,也很少需要考虑这些概念。分级测试一般用在系统测试阶段。分级测试,就是说对测试进行分级,区分什么重要、什么不重要,做区别对待。之所以需要区别对待,我总结有两个原因。一个是因为资源上的限制,时间、人力,让我们没有条件来做无差别覆盖。二是本身的限制,在测试阶段,提测质量往往是不尽人意的,只能是层层深入去做测试。.

    2025年5月22日
    10
  • 1.1音响系统放大器设计

    1.1音响系统放大器设计​⑴了解集成功率放大器内部电路工作原理;​​⑵掌握其外围电路的设计与主要性能参数的测试方法;​​⑶掌握用运放与功率管设计音频功率放大电路的方法;​​(4)掌握运用电路仿真软件进行模拟电路辅助设计的方法;

    2022年5月8日
    46

发表回复

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

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