forkjoin应该是出来很久的技术,但我从未使用过,直到上一个项目中,有个功能点对性能要求很高,如果按照单线程遍历的方法是不行。
那就只有用分治法来实现,但在实现的过程中发现forkjoin。于是,本着“拿来主义“的精神,就去看了下。发现它刚好能满足我的需求.
下面是forkjoin的简单使用,希望对需要的人提供一些帮助.
import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; import java.util.concurrent.RecursiveTask; public class TestForkJoinFirst extends RecursiveTask<Integer> { private static final int minNum = 50; private int start; private int end; public TestForkJoinFirst(int start,int end) { this.start = start; this.end = end; } @Override protected Integer compute() { int result = 0; if ((end - start) <= minNum) { for (int i = start; i <= end; i++) { result += i; } } else { int middle = (end + start)/ 2; TestForkJoinFirst left = new TestForkJoinFirst(start, middle); TestForkJoinFirst right = new TestForkJoinFirst(middle+1, end); left.fork(); right.fork(); result = left.join() + right.join(); } return result; } public static void main(String[] args) throws InterruptedException, ExecutionException { ForkJoinPool pool = new ForkJoinPool(); Future<Integer> result = pool.submit(new TestForkJoinFirst(1, 200)); System.out.println(result.get()); } }
相关推荐
由于Fork/Join框架的复杂性,它通常不会用于简单的任务。设计和实现使用Fork/Join框架的应用程序需要仔细考虑任务的拆分和合并策略,以及如何有效地避免任务窃取引起的竞争和数据一致性问题。 在实际应用中,Fork/...
`ForkJoin入门.ppt`是PPT文件,里面详细介绍了并发与并行的概念以及ForkJoin框架的使用方法,包括如何创建和执行ForkJoin任务。`FileSize.java`可能包含了一个实际的ForkJoinTask示例,用于计算文件大小或其他类似的...
【标题】:基于JDK的ForkJoin构建一个简单易用的并发组件1 【描述】:在实际的IT项目中,并发编程是提高效率的关键技术之一。一个典型的并发应用场景是商品详情页面的展示,该页面包含商品基本信息、销量、地址、...
下面是一个简单的ForkJoin框架的应用示例,该示例展示了如何使用ForkJoin框架来计算一组数字的总和: ```java public class ForkJoinDemo extends RecursiveTask<Long> { private Long start; private Long end; ...
Fork-Join框架尤其专注于细粒度并行任务的执行,允许开发者通过简单的接口实现复杂算法的并行化。 ##### 2. Divide and Conquer Fork-Join框架的核心思想是“分而治之”(Divide and Conquer),即将一个大任务分解...
Fork/Join框架是Java并发处理的一个重要工具,它基于工作窃取算法,设计用于高效地执行并行计算任务。这个框架是Java 7引入的,位于`java.util.concurrent.fork/join`包中,目的是简化多核处理器环境下大规模数据...
Fork/Join 模式通过 ForkJoinPool 和 ForkJoinTask 类的使用,使得开发者可以专注于任务的拆分和结果的合并,而不必过多地关心线程管理和同步等问题。 ForkJoinPool 是执行 ForkJoinTask 的工作池,它维护了一个...
在JBPM中,`Fork`和`Join`的组合使用能构建出复杂的并发和同步逻辑。通过合理设计`Fork`和`Join`,我们可以创建灵活、高效的流程,适应不同业务场景的需求。 对于开发人员来说,理解`Fork`和`Join`的工作原理及其...
`simple-fork-join`项目提供的示例代码可以帮助初学者理解如何在Java中使用ForkJoin框架来编写高效的并行计算程序。通过分析和实践这个项目,开发者可以深入掌握并行编程的核心概念,提升软件性能。
OpenMP(C),ForkJoin(JAVA)和Disruptor(JAVA)质数查找器这是我做过的最有趣的并发程序包之一。 目标保持不变:在输入数组中查找素数。 不同之处在于它的完成方式。 这不需要手动的并发过程,而是真正使用C和...
python-并行化使用 Python 的for循环进行简单的 fork/join 并行快速开始使用进程/CPU 进行并行迭代: import osfrom parallelize import parallelize for i in parallelize ( range ( 100 )): print ( os ....
下面是一个简单的Fork/Join框架示例,假设我们要计算一个数组的总和: ```java class SumTask extends RecursiveTask<Integer> { private int[] array; private int start, end; public SumTask(int[] array, ...
在给定的代码示例中,`RecursiveActionDemo`类继承自`RecursiveAction`,并展示了如何利用Fork/Join框架进行简单的数组排序。下面将详细解释这段代码的工作原理以及Fork/Join框架的关键概念: 1. **ForkJoinPool**...
以下是一个简单的Fork/Join框架的使用示例: 假设我们要计算1到10000的数字之和。首先,创建一个Task类,继承自RecursiveTask,并设置一个阈值THRESHOLD,表示任务足够小可以立即执行的条件。在compute()方法中,...
与ExecutorService其他实现不同,Fork / Join框架使用工作窃取算法( ),该算法可最大程度地利用线程,并提供了一种更简单的方式来处理产生其他任务的任务(称为子任务)。 以下列出的所有代码都可以在以下位置...
JoinAndForkUtility 可轻松使用 java 7 中的 join 和 fork 功能的实用程序类。 易于使用并提高耗时 for 循环的性能。 更多的是尝试将 fork/join/compute 方法等与业务问题分离。用法如果您必须为大量对象循环耗时的...
一个最简单的例子是使用 Fork/Join 框架来求一个数组中的最大/最小值,这个任务就可以拆成很多小任务,大任务就是寻找一个大数组中的最大/最小值,我们可以将一个大数组拆成很多小数组,然后分别求解每个小数组中的...
ForkJoin框架详解.mp4 同步容器与并发容器.mp4 并发容器CopyOnWriteArrayList原理与使用.mp4 并发容器ConcurrentLinkedQueue原理与使用.mp4 Java中的阻塞队列原理与使用.mp4 实战:简单实现消息队列.mp4 并发容器...