Java fork join ForkJoinPool 用法例子
本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
技术:JDK8.0, Javafork-join模式下的RecursiveTask技术,override compute().
- /**
- * Author: Bigtree
- * 本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
- * 技术:
- * java fork-join模式下的RecursiveTask技术,override compute().
- */
- import java.util.*;
- import java.util.concurrent.*;
- class Caltask extends RecursiveTask<Long>{
- private static final int THRESHOLD = 1000; //how many numbers one thread can calculate
- private long data[];
- private int start;
- private int end;
- public Caltask(long[] inputData,int start, int end){
- data=inputData;
- this.start=start;
- this.end=end;
- }
- @Override
- protected Long compute() {
- Long sumResult=0L;
- if((end - start) <= THRESHOLD ){
- for(int index=start; index<end;index++) {
- sumResult += data[index];
- }
- }
- else { //parallel computing
- int step=(end-start)/THRESHOLD;
- if(((end-start)%THRESHOLD)>0)
- step+=1;
- ArrayList<Caltask> tasks = new ArrayList<>();
- int pos=start;
- int lastposition;
- for(int i=0;i<step;i++){
- lastposition=pos+THRESHOLD;
- if(lastposition>end)
- lastposition=end;
- Caltask onetask= new Caltask(data,pos,lastposition);
- pos=lastposition;
- tasks.add(onetask);
- onetask.fork();
- }
- for(Caltask mtask : tasks){
- sumResult += mtask.join();
- }
- }
- return sumResult;
- }
- }
- public class forkjoincompute {
- public static void ForkJoinShow(){
- long data[] = new long[20001];
- for(long i=0;i<data.length;i++){
- data[(int) i]= i + 1;
- }
- ForkJoinPool mypool= ForkJoinPool.commonPool();
- Future<Long> myfuture = mypool.submit( new Caltask(data,0,data.length));
- try{
- long result=myfuture.get();
- System.out.println("forkjoincompute():computed final result="+result);
- } catch(InterruptedException e){
- e.printStackTrace();
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mypool.shutdown();
- }
- }
输出结果:
forkjoincompute():computed final result=200030001
Java fork join ForkJoinPool 用法例子的更多相关文章
- java Fork/Join框架
应用程序并行计算遇到的问题 当硬件处理能力不能按摩尔定律垂直发展的时候,选择了水平发展.多核处理器已广泛应用,未来处理器的核心数将进一步发布,甚至达到上百上千的数量.而现在很多的应用程序在运行在多核心 ...
- Java Fork/Join 框架
简介 从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果. 这种思想和MapReduce很像 ...
- Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)
作者简介 Dong Lea任职于纽约州立大学奥斯威戈分校(State University of New York at Oswego),他发布了第一个广泛使用的java collections框架实 ...
- JAVA FORK JOIN EXAMPLE--转
http://www.javacreed.com/java-fork-join-example/ Java 7 introduced a new type of ExecutorService (Ja ...
- java fork/join简单实践
我们知道,java8中有并行流,而并行流在后台的实现是通过fork/join池来完成的,例如: List<Integer> a = buildList(); List<Integer ...
- Java Fork/Join
Fork/Join框架 Fork/Join 以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果. 这个过程其实就是分治算法的并行版本,图解如下: 如何使用 我们要使 ...
- fork...join的用法
如果希望在仿真的某一时刻同时启动多个任务,可以使用fork....join语句.例如,在仿真开始的 100 ns 后,希望同时启动发送和接收任务,而不是发送完毕后再进行接收,如下所示: initial ...
- Java Thread join() 的用法
Java Thread中, join() 方法主要是让调用改方法的thread完成run方法里面的东西后, 在执行join()方法后面的代码.示例: class ThreadTesterA imple ...
- Java并发——Fork/Join框架与ForkJoinPool
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4631466. ...
随机推荐
- 4个开源的Gmail替代品
资料来源 https://opensource.com/alternatives/gmail 本文是对原文翻译,在调试 privmx 时么有成功,这些代码大多用于 php5 ,对PHP7 不兼容. 相 ...
- UML类图与类图中的关系
以下内容摘自<Java与模式> 在类与类之间,会有连线指明它们之间的关系.类和类.类和接口.接口和接口之间可以建立以下几种关系:一般化关系.关联关系.聚合关系.合成关系和依赖关系,这几种关 ...
- [TS] Swap two element in the array (mutation)
Shuffling is a common process used with randomizing the order for a deck of cards. The key property ...
- ORA-01078错误举例:SID的大写和小写错误
案例重演: dbca建库.SID:metro --手工建库时实例名小写的metro ...... [oracle@org54 ~]$ export ORACLE_SID=METRO ...
- HTML基础第六讲---表格
转自:https://i.cnblogs.com/posts?categoryid=1121494 上一讲,讲了关于<控制表格及其表项的对齐方式>,在这里我要讲讲表格及其属性 ,然后大家在 ...
- UML学习之初步总结
UML(Unified Modeling Language)即统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最 ...
- golang 获取环境信息
os.Environ() os.Getenv("TMP")
- subline Text3 安装及汉化
因为自己的subline 有问题 所以决心重新改一下了. 三步: http://www.sublimetext.com/3 官网下载subline3 https://www.imjeff. ...
- 15.SpringBoot简介-SpringBoot是什么可以做什么
转自:https://blog.csdn.net/kingboyworld/article/details/77713743 在过去的两年时间里,最让人兴奋.回头率最高.最能改变游戏规则的东西,大概就 ...
- HTTP网络协议(三)
HTTP首部字段有四种类型:通用首部字段,请求首部字段,响应首部字段,实体首部字段. 通用首部字段: 首部字段 说明 Cache-Control 控制缓存的行为 Connection 逐跳首部.连接 ...