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. ios 上传视频或图片

    关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...

  2. ofbiz数据库表结构设计(2)- CONTACT_MECH

    ofbiz中,party的电话.地址等联系方式设计得非常巧妙,让我们来仔细分析一下. 有一个叫做CONTACT_MECH的表,这张表我们把它称作联系方式表,一个电话号码.一个通讯地址.一个电子邮件,都 ...

  3. Connect(bzoj 1948)

    Description 给定一个R*C大小的迷宫,其中R,C均为奇数 迷宫中坐标为两个奇数的点不能通过,称为障碍,迷宫中其他不能通过的点统称为墙壁 坐标为两个偶数的点可以通过,称为房间,迷宫中其他可通 ...

  4. 洛谷 P1653 == COGS 2043 猴子

    P2107 可爱的猴子 时间限制:1000MS  空间限制:65535KB 问题描述: 树上有n只猴子.它们编号为 1 到n.1 号猴子用它的尾巴勾着树枝.剩下的猴子都被其他的猴子用手抓着.每只猴子的 ...

  5. 写一个Foreach帮助类,在razor中使用

    原文发布时间为:2011-05-05 -- 来源于本人的百度文章 [由搬家工具导入] A Better Razor Foreach Loop(razor delegate extension) htt ...

  6. 嵌入式 Linux线程锁详解pthread_mutexattr_t【转】

    转自:http://blog.sina.com.cn/s/blog_8795b0970101il6g.html 在Posix Thread中定义有一套专门用于线程同步的mutex函数. . 创建和销毁 ...

  7. Elasticsearch之pythonAPI简单使用

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

  8. abstract抽象类和interface接口

    一.抽象类 1.抽象类不能实例化,因为有抽象方法未实现 2.可以被抽象类或非抽象类继承 3.但不是只能被继承,还可以直接拿来使用的,当然,这个使用是拿来声明,反例如下: public abstract ...

  9. hdu 3074(线段树)

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  10. EasyUI左边树菜单和datagrid分页

    //这个页面是Home.html 1 <!DOCTYPE html> <html> <head> <meta http-equiv="Content ...