ForkJoin简单示例
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简单示例的更多相关文章
- 并行编程OpenMP基础及简单示例
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- SignalR 简单示例
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
- Web API 简单示例
一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...
随机推荐
- Xib中用自动布局设置UIScrollView的ContenSize
1. 在UIScrollView上拖一个UIView 2.设置UIScrollView上下左右约束为0,设置UIView上下左右约束为0,并且设置水平中线约束.那么可以把水平中线约束拖到对应视图,利用 ...
- PDO 的错误处理
PDO 全称 PHP Data Object ------------------ 错误处理 ------------------------- php 的 mysql 扩展对于 mys ...
- 写php用什么编辑器
编辑器是编程工作者强有力的工具,一款好的编辑器可以大大加快程序员的开发速度.那么,如何在众多编辑器中选出顺手的编辑器呢? 下面为大家推荐几款好评较多的编辑器: 1.NetBeans —— 免费,开源, ...
- ES6中的export和import
1.ES6中的模块加载 ES6 模块是编译时加载,编译时就能确定模块的依赖关系,以及输入和输出的变量,相比于CommonJS 和 AMD 模块都只能在运行时确定输入输出变量的加载效率要高. 1.1.严 ...
- [NOIP2016]蚯蚓 题解
题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」= [3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. ...
- web服务器、WSGI跟Flask(等框架)之间的关系
之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 HTT ...
- MySQL体系结构概览
MySQL体系结构 InnoDB体系结构 MySQL实例有一组后台线程.一些内存块和若干服务线程组成 在默认情况下,MySQL有7组后台线程,分别为1个主线程,4组IO线程,1个锁线程,1个错误监控线 ...
- 利用AddressBook.framework框架获取iOS系统通讯录数据
此方法是使用AddressBook.framework框架获取通讯录信息 第一步.在info.plist文件里面配置访问权限 第二步.导入头文件 #import <AddressBook/Add ...
- js 文件下载进度监控
var xhr = new XMLHttpRequest(); xhr.open('GET', '文件地址.mp4'); xhr.setRequestHeader("Content-type ...
- HDU 2512 一卡通大冒险 (第二类斯特林数)
题目链接:HDU 2512 Problem Description 因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部分都是单身.某天,他们在机房商量一个绝妙的计划 ...