本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。

技术:JDK8.0, Javafork-join模式下的RecursiveTask技术,override compute().

  1. /**
  2. * Author: Bigtree
  3. * 本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
  4. * 技术:
  5. * java fork-join模式下的RecursiveTask技术,override compute().
  6. */
  7. import java.util.*;
  8. import java.util.concurrent.*;
  9. class Caltask extends RecursiveTask<Long>{
  10. private static final int THRESHOLD = 1000; //how many numbers one thread can calculate
  11. private long data[];
  12. private int start;
  13. private int end;
  14. public Caltask(long[] inputData,int start, int end){
  15. data=inputData;
  16. this.start=start;
  17. this.end=end;
  18. }
  19. @Override
  20. protected Long compute() {
  21. Long sumResult=0L;
  22. if((end - start) <= THRESHOLD ){
  23. for(int index=start; index<end;index++) {
  24. sumResult += data[index];
  25. }
  26. }
  27. else { //parallel computing
  28. int step=(end-start)/THRESHOLD;
  29. if(((end-start)%THRESHOLD)>0)
  30. step+=1;
  31. ArrayList<Caltask> tasks = new ArrayList<>();
  32. int pos=start;
  33. int lastposition;
  34. for(int i=0;i<step;i++){
  35. lastposition=pos+THRESHOLD;
  36. if(lastposition>end)
  37. lastposition=end;
  38. Caltask onetask= new Caltask(data,pos,lastposition);
  39. pos=lastposition;
  40. tasks.add(onetask);
  41. onetask.fork();
  42. }
  43. for(Caltask mtask : tasks){
  44. sumResult += mtask.join();
  45. }
  46. }
  47. return sumResult;
  48. }
  49. }
  50. public class forkjoincompute {
  51. public static void ForkJoinShow(){
  52. long data[] = new long[20001];
  53. for(long i=0;i<data.length;i++){
  54. data[(int) i]= i + 1;
  55. }
  56. ForkJoinPool mypool= ForkJoinPool.commonPool();
  57. Future<Long> myfuture = mypool.submit( new Caltask(data,0,data.length));
  58. try{
  59. long result=myfuture.get();
  60. System.out.println("forkjoincompute():computed final result="+result);
  61. } catch(InterruptedException e){
  62. e.printStackTrace();
  63. } catch (ExecutionException e) {
  64. // TODO Auto-generated catch block
  65. e.printStackTrace();
  66. }
  67. mypool.shutdown();
  68. }
  69. }

输出结果:

forkjoincompute():computed final result=200030001

Java fork join ForkJoinPool 用法例子的更多相关文章

  1. java Fork/Join框架

    应用程序并行计算遇到的问题 当硬件处理能力不能按摩尔定律垂直发展的时候,选择了水平发展.多核处理器已广泛应用,未来处理器的核心数将进一步发布,甚至达到上百上千的数量.而现在很多的应用程序在运行在多核心 ...

  2. Java Fork/Join 框架

    简介 从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果. 这种思想和MapReduce很像 ...

  3. Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)

    作者简介 Dong Lea任职于纽约州立大学奥斯威戈分校(State University of New York at Oswego),他发布了第一个广泛使用的java collections框架实 ...

  4. JAVA FORK JOIN EXAMPLE--转

    http://www.javacreed.com/java-fork-join-example/ Java 7 introduced a new type of ExecutorService (Ja ...

  5. java fork/join简单实践

    我们知道,java8中有并行流,而并行流在后台的实现是通过fork/join池来完成的,例如: List<Integer> a = buildList(); List<Integer ...

  6. Java Fork/Join

    Fork/Join框架 Fork/Join 以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果. 这个过程其实就是分治算法的并行版本,图解如下: 如何使用 我们要使 ...

  7. fork...join的用法

    如果希望在仿真的某一时刻同时启动多个任务,可以使用fork....join语句.例如,在仿真开始的 100 ns 后,希望同时启动发送和接收任务,而不是发送完毕后再进行接收,如下所示: initial ...

  8. Java Thread join() 的用法

    Java Thread中, join() 方法主要是让调用改方法的thread完成run方法里面的东西后, 在执行join()方法后面的代码.示例: class ThreadTesterA imple ...

  9. Java并发——Fork/Join框架与ForkJoinPool

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4631466. ...

随机推荐

  1. Exploring Micro-frameworks: Spring Boot--转载

    原文地址:http://www.infoq.com/articles/microframeworks1-spring-boot Spring Boot is a brand new framework ...

  2. 1.23 Python知识进阶 - 面向对象编程

    一.编程方法 1.函数式编程:"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论.它属于"结构化 ...

  3. Wiz+360云盘,让你的知识库井井有条

    用了wiz快两年了,一些同事看到我在找资料时打开wiz,总会好奇的问这是什么,想到还有很多同仁在用文件夹管理知识库,于是想分享一下我的管理方法.(PS:鄙人愚见,如有高见,望指教) Wiz为知笔记下载 ...

  4. 非常不错的canvas效果,线随心动

    非常不错的canvas效果,下面是html代码. <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  5. SpringMVC,Mybatis,FreeMarker连接mycat示例(一)

    首页 > 程序开发 > 软件开发 > Java > 正文 SpringMVC,Mybatis,FreeMarker连接mycat示例(一) 项目结构如图: 首先是各种配置文件, ...

  6. Java调用jama实现矩阵运算

    Java调用jama实现矩阵运算 一.jama简介 Jama是一个基本的线性代数java包.包括一个基本的Matrix类和5个矩阵分解类. Matrix类提供了基本的线性代数数值运算的功能,不同的构造 ...

  7. 洛谷 P1724 东风谷早苗

    P1724 东风谷早苗 题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧 ...

  8. Android DiskLruCache全然解析,硬盘缓存的最佳方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/28863651 概述 记得在非常早之前.我有写过一篇文章Android高效载入大图. ...

  9. hello word-python 入门

    今天正式开始学习python,先写一个最今经典的例子 helloword #!/usr/bin/python3.2 print("hello work!") 知识点: #!usr/ ...

  10. 学习笔记:_lodash.js常用函数2

    _.pick(object, [props]) 创建一个从object中选中的属性的对象. 示例: var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick( ...