import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask; public class CountTaskForkJoinTest extends RecursiveTask<Long> { private static final long serialVersionUID = 1L; private static final int threshold = 100;//临界值
private long start;
private long end; public CountTaskForkJoinTest(long start, long end) {
this.start = start;
this.end = end;
} /**
* 重写compute方法,判断是否将任务进行拆分计算
*/
@Override
protected Long compute() {
long sum = 0;
//判断是否是拆分完毕
boolean canCompute = (end - start) <= threshold;
if (canCompute) {
for (long i = start; i <= end; i++) {
sum += i;
}
} else {
long middle = (start + end) / 2;
CountTaskForkJoinTest task1 = new CountTaskForkJoinTest(start, middle);
CountTaskForkJoinTest task2 = new CountTaskForkJoinTest(middle, end); task1.fork();
task2.fork(); long result1 = task1.join();
long result2 = task2.join();
sum = result1 + result2;
}
return sum;
} /**
* ForkJoin实现,返回计算结果
* @param start 起始值
* @param end 结束值
* @return
* @throws InterruptedException
* @throws ExecutionException
*/
private static long forkJoinTest(long start, long end) throws InterruptedException, ExecutionException {
ForkJoinPool pool = new ForkJoinPool();
CountTaskForkJoinTest task = new CountTaskForkJoinTest(start, end); Future<Long> result = pool.submit(task);
return result.get();
} public static void main(String[] args) throws InterruptedException, ExecutionException { long start_index = 1;
long end_index = 50; long ret = forkJoinTest(start_index, end_index);
System.out.println("result: " + ret); }
}

ForkJoin简单示例的更多相关文章

  1. 并行编程OpenMP基础及简单示例

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  2. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  3. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  4. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  6. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  7. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  8. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

  9. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

随机推荐

  1. iOS多媒体总结&进入后台播放音乐

    1. 播放mp3需要导入框架,AVFoundation支持音频文件(.caf..aif..wav..wmv和.mp3)的播放. #import <AVFoundation/AVFoundatio ...

  2. MapServer教程2

    第二章 Tutorial 教程 MapServer Tutorial MapServer教程 Tutorial background 教程背景 Section 1: Static Maps and t ...

  3. 后端技术杂谈10:Docker 核心技术与实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. wl

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. EZOJ #387字符串

    分析 似乎ttl的模拟赛t3总是折半搜索? 先把所有串转化为每个字母的0/1状态 之后我们将所有字符串分为两半 分别枚举状态 我们发现只有左右两边的字母状态相等才能保证这个集合合法 所以我们在搜左半边 ...

  6. data_model_action

    w PowerDesigner

  7. Note:目录2

    ylbtech-Note:目录2 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech ...

  8. FCKEditor添加字体

    默认情况下,FCKEditor在进行文本编辑时,无法使用中文字体.自个摸索了下:打开 fckconfig.js 文件 找到第154行(应该是),会发现:FCKConfig.FontNames = 'A ...

  9. Python算法每日一题--001--给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  10. 个人珍藏的PC和安卓应用列表

    个人珍藏的PC和安卓应用列表 PC应用名称 功能描述 注意事项 存储位置 维棠FLV视频下载软件 可用来下载腾讯视频的视频 将视频列表的网址粘贴到维棠软件左侧"下载"的地址中即可批 ...