fork/join的java7新添加的功能,能够把它理解成一个并发框架。

我们通过fork/join能将一个可分解的大任务。分解成多个子任务同步运行。运行完成后,在将各子任务的结果进行合并,得到终于的结果。

使用fork/join,首先要创建fork/join任务。能够通过继承RecursiveActionRecursiveTask来实现(ForkJoinTask是它们的父类)

  • RecursiveAction 不返回结果
  • RecursiveTask 返回结果

经常用法

  • compute(); 计算方法(分拆的子任务)
  • fork(); // 运行子任务
  • join(); // 子任务结束后返回相应结果

ForkJoinPool

除此之外。java还提供了个ForkJoinPool的工具类。它实现了工作窃取算法,使得空暇线程能够主动分担从别的线程分解出来的子任务。从而让全部的线程都尽可能处于饱满的工作状态。提高运行效率。

经常用法

  • execute(); //异步运行命令
  • invoke()和invokeAll(); // 异步运行命令。并返回相应结果
  • submit(); //异步运行命令,同一时候返回Future对象

使用方式例如以下

class Demo extends java.util.concurrent.RecursiveTask<Integer>{
int start;
int end; public Demo(int start,int end){
this.start=start;
this.end=end;
} @Override
protected Integer compute() {
int sum=0;
int s=start;
int e=end;
for(;s<=end;s++){
sum+=s;
}
return sum;
}
} @Test
public void test2(){
//1到1亿。相加等于几 0.37
Demo demo1=new Demo(1,50000000);
Demo demo2=new Demo(50000001,100000000);
demo1.fork();
demo2.fork();
System.out.println(demo1.join()+demo2.join());
} @Test
public void test3(){
ForkJoinPool fjp=new ForkJoinPool();
Demo demo1=new Demo(1,50000000);
Demo demo2=new Demo(50000001,100000000);
System.out.println(fjp.invoke(demo1)+fjp.invoke(demo2));
}

浅谈 Fork/Join的更多相关文章

  1. MySQL浅谈 LEFT JOIN

    On条件(在“A left join b on conditional_expr”)决定如何从table B 中检索数据行(Matching-State); 如果B中没有行匹配On 条件,额外的B的所 ...

  2. 开发工具--浅谈Git

    工具|浅谈Git Git这个工具,是我一直想写文章,终于我实现了我的想法.在我开始写之前,发表一下自己的看法,git只是一个工具,既然已经认定是一个工具,那么一定具备工具这类的共同特征,请用面向对象的 ...

  3. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  4. TODO:浅谈pm2基本工作原理

    TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...

  5. javascript数组浅谈2

    上次说了数组元素的增删,的这次说说数组的一些操作方法 join()方法: ,,] arr.join("_") //1_2_3 join方法会返回一个由数组中每个值的字符串形式拼接而 ...

  6. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  7. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  8. Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈

    一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...

  9. 浅谈 js 正则字面量 与 new RegExp 执行效率

    原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...

随机推荐

  1. 最长k可重区间集(cogs 743)

    «问题描述:«编程任务:对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度.«数据输入:由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间 ...

  2. pat 甲级 1066. Root of AVL Tree (25)

    1066. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  3. 【POJ3667】Hotel(线段树)

    题意:有n个依次编号的元素,要求维护以下两个操作: 1.询问整个数列中是否有长度>=x的连续的一段未被标记的元素,若无输出0,若有输出最小的开始编号ans并将[ans,ans+x-1]标记 2. ...

  4. .NET泛型编程 性能提升工具 List<T>

    原文发布时间为:2009-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 结论  .NET 2.0中的泛型是强有力的,你写的代码不必限定于一特定类型,然而你的代码却能具有类型安全性。泛型的 ...

  5. hdu 1403 Longest Common Substring 后缀数组 模板题

    题目链接 题意 问两个字符串的最长公共子串. 思路 加一个特殊字符然后拼接起来,求得后缀数组与\(height\)数组.扫描一遍即得答案,注意判断起始点是否分别在两个串内. Code #include ...

  6. 关于Xcode6 的自定义模板位置

    自定义模板放置位置: Xode6 -> 打开App 后, /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xc ...

  7. Elasticsearch之pythonAPI简单使用

    elasticsearch自动补全建议功能 数据入库操作 ESmapping要求 PUT music { "mappings": { "_doc" : { &q ...

  8. java.lang.StackOverflowError at org.eclipse.jetty.util.resource.Resource.<init>(Resource.java:40)

    今天做项目的时候,不知道哪根筋搭错了,多写了一句话,导致我忙活了一下午,各种百度,最后在朋友的帮助下,给了我思路,完美解决,不多说,上图. 我的登录页面引入了bootstrap.jsp的东西 解决问题 ...

  9. workflow engine Ruote 安装

    今天在安装gem安装Ruote的过程中遇到问题,改用bundle安装: steven@steven-Latitude-D630:/usr$ sudo mkdir bundel [sudo] passw ...

  10. MySQL OCP

    http://www.royalwzy.com/ http://www.aixchina.net/home/space.php?uid=898169