浅谈 Fork/Join
fork/join的java7新添加的功能,能够把它理解成一个并发框架。
我们通过fork/join能将一个可分解的大任务。分解成多个子任务同步运行。运行完成后,在将各子任务的结果进行合并,得到终于的结果。
使用fork/join,首先要创建fork/join任务。能够通过继承RecursiveAction或RecursiveTask来实现(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的更多相关文章
- MySQL浅谈 LEFT JOIN
On条件(在“A left join b on conditional_expr”)决定如何从table B 中检索数据行(Matching-State); 如果B中没有行匹配On 条件,额外的B的所 ...
- 开发工具--浅谈Git
工具|浅谈Git Git这个工具,是我一直想写文章,终于我实现了我的想法.在我开始写之前,发表一下自己的看法,git只是一个工具,既然已经认定是一个工具,那么一定具备工具这类的共同特征,请用面向对象的 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- TODO:浅谈pm2基本工作原理
TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...
- javascript数组浅谈2
上次说了数组元素的增删,的这次说说数组的一些操作方法 join()方法: ,,] arr.join("_") //1_2_3 join方法会返回一个由数组中每个值的字符串形式拼接而 ...
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈
一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...
- 浅谈 js 正则字面量 与 new RegExp 执行效率
原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...
随机推荐
- 最长k可重区间集(cogs 743)
«问题描述:«编程任务:对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度.«数据输入:由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间 ...
- pat 甲级 1066. Root of AVL Tree (25)
1066. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue An A ...
- 【POJ3667】Hotel(线段树)
题意:有n个依次编号的元素,要求维护以下两个操作: 1.询问整个数列中是否有长度>=x的连续的一段未被标记的元素,若无输出0,若有输出最小的开始编号ans并将[ans,ans+x-1]标记 2. ...
- .NET泛型编程 性能提升工具 List<T>
原文发布时间为:2009-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 结论 .NET 2.0中的泛型是强有力的,你写的代码不必限定于一特定类型,然而你的代码却能具有类型安全性。泛型的 ...
- hdu 1403 Longest Common Substring 后缀数组 模板题
题目链接 题意 问两个字符串的最长公共子串. 思路 加一个特殊字符然后拼接起来,求得后缀数组与\(height\)数组.扫描一遍即得答案,注意判断起始点是否分别在两个串内. Code #include ...
- 关于Xcode6 的自定义模板位置
自定义模板放置位置: Xode6 -> 打开App 后, /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xc ...
- Elasticsearch之pythonAPI简单使用
elasticsearch自动补全建议功能 数据入库操作 ESmapping要求 PUT music { "mappings": { "_doc" : { &q ...
- java.lang.StackOverflowError at org.eclipse.jetty.util.resource.Resource.<init>(Resource.java:40)
今天做项目的时候,不知道哪根筋搭错了,多写了一句话,导致我忙活了一下午,各种百度,最后在朋友的帮助下,给了我思路,完美解决,不多说,上图. 我的登录页面引入了bootstrap.jsp的东西 解决问题 ...
- workflow engine Ruote 安装
今天在安装gem安装Ruote的过程中遇到问题,改用bundle安装: steven@steven-Latitude-D630:/usr$ sudo mkdir bundel [sudo] passw ...
- MySQL OCP
http://www.royalwzy.com/ http://www.aixchina.net/home/space.php?uid=898169