`
lanqiu17
  • 浏览: 17717 次
社区版块
存档分类
最新评论

forkjoin简单使用

阅读更多

  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());
	}

}

 

分享到:
评论

相关推荐

    java Fork Join框架及使用

    由于Fork/Join框架的复杂性,它通常不会用于简单的任务。设计和实现使用Fork/Join框架的应用程序需要仔细考虑任务的拆分和合并策略,以及如何有效地避免任务窃取引起的竞争和数据一致性问题。 在实际应用中,Fork/...

    ForkJoin并发框架入门示例

    `ForkJoin入门.ppt`是PPT文件,里面详细介绍了并发与并行的概念以及ForkJoin框架的使用方法,包括如何创建和执行ForkJoin任务。`FileSize.java`可能包含了一个实际的ForkJoinTask示例,用于计算文件大小或其他类似的...

    基于JDK的ForkJoin构建一个简单易用的并发组件1

    【标题】:基于JDK的ForkJoin构建一个简单易用的并发组件1 【描述】:在实际的IT项目中,并发编程是提高效率的关键技术之一。一个典型的并发应用场景是商品详情页面的展示,该页面包含商品基本信息、销量、地址、...

    Stream流式计算、ForkJoin和异步回调.md

    下面是一个简单的ForkJoin框架的应用示例,该示例展示了如何使用ForkJoin框架来计算一组数字的总和: ```java public class ForkJoinDemo extends RecursiveTask&lt;Long&gt; { private Long start; private Long end; ...

    fork/join 实例

    Fork/Join框架是Java并发处理的一个重要工具,它基于工作窃取算法,设计用于高效地执行并行计算任务。这个框架是Java 7引入的,位于`java.util.concurrent.fork/join`包中,目的是简化多核处理器环境下大规模数据...

    JDK7中的ForkJoin模式

    Fork/Join 模式通过 ForkJoinPool 和 ForkJoinTask 类的使用,使得开发者可以专注于任务的拆分和结果的合并,而不必过多地关心线程管理和同步等问题。 ForkJoinPool 是执行 ForkJoinTask 的工作池,它维护了一个...

    工作流jbpm中join与fork用法

    在JBPM中,`Fork`和`Join`的组合使用能构建出复杂的并发和同步逻辑。通过合理设计`Fork`和`Join`,我们可以创建灵活、高效的流程,适应不同业务场景的需求。 对于开发人员来说,理解`Fork`和`Join`的工作原理及其...

    simple-fork-join:ForkJoin的简单示例

    `simple-fork-join`项目提供的示例代码可以帮助初学者理解如何在Java中使用ForkJoin框架来编写高效的并行计算程序。通过分析和实践这个项目,开发者可以深入掌握并行编程的核心概念,提升软件性能。

    Prime_C_JAVA:OpenMP(C),ForkJoin(JAVA)和Disruptor(JAVA)质数查找器

    OpenMP(C),ForkJoin(JAVA)和Disruptor(JAVA)质数查找器这是我做过的最有趣的并发程序包之一。 目标保持不变:在输入数组中查找素数。 不同之处在于它的完成方式。 这不需要手动的并发过程,而是真正使用C和...

    python-parallelize:使用 Python 的 for 循环实现简单的 forkjoin 并行

    python-并行化使用 Python 的for循环进行简单的 fork/join 并行快速开始使用进程/CPU 进行并行迭代: import osfrom parallelize import parallelize for i in parallelize ( range ( 100 )): print ( os ....

    译文:Fork and Join: Java Can Excel at Painless Parallel Programming Too!

    下面是一个简单的Fork/Join框架示例,假设我们要计算一个数组的总和: ```java class SumTask extends RecursiveTask&lt;Integer&gt; { private int[] array; private int start, end; public SumTask(int[] array, ...

    Java通过Fork/Join优化并行计算

    在给定的代码示例中,`RecursiveActionDemo`类继承自`RecursiveAction`,并展示了如何利用Fork/Join框架进行简单的数组排序。下面将详细解释这段代码的工作原理以及Fork/Join框架的关键概念: 1. **ForkJoinPool**...

    35 拆分你的任务—学习使用Fork-Join框架.pdf

    以下是一个简单的Fork/Join框架的使用示例: 假设我们要计算1到10000的数字之和。首先,创建一个Task类,继承自RecursiveTask,并设置一个阈值THRESHOLD,表示任务足够小可以立即执行的条件。在compute()方法中,...

    java-fork-join-example

    与ExecutorService其他实现不同,Fork / Join框架使用工作窃取算法( ),该算法可最大程度地利用线程,并提供了一种更简单的方式来处理产生其他任务的任务(称为子任务)。 以下列出的所有代码都可以在以下位置...

    ForkAndJoinUtility:实用程序类可轻松使用 java 中的 join 和 fork 功能

    JoinAndForkUtility 可轻松使用 java 7 中的 join 和 fork 功能的实用程序类。 易于使用并提高耗时 for 循环的性能。 更多的是尝试将 fork/join/compute 方法等与业务问题分离。用法如果您必须为大量对象循环耗时的...

    浅谈Java Fork/Join并行框架

    一个最简单的例子是使用 Fork/Join 框架来求一个数组中的最大/最小值,这个任务就可以拆成很多小任务,大任务就是寻找一个大数组中的最大/最小值,我们可以将一个大数组拆成很多小数组,然后分别求解每个小数组中的...

    Java并发编程原理与实战

    ForkJoin框架详解.mp4 同步容器与并发容器.mp4 并发容器CopyOnWriteArrayList原理与使用.mp4 并发容器ConcurrentLinkedQueue原理与使用.mp4 Java中的阻塞队列原理与使用.mp4 实战:简单实现消息队列.mp4 并发容器...

Global site tag (gtag.js) - Google Analytics