木头人
2018-08-21 10:52:46
java并行执行任务的框架Fork/Join的使用实例
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
import java.util.stream.LongStream;
/**
* @Auther: jack
* @Date: 2018/7/23 19:50
* @Description:
* Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,
* 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架
*/
public class ForkJoinCalculator extends RecursiveTask<Long> {
private long start;
private long end;
private static final long THRESHOLD=10000;
public ForkJoinCalculator(long start,long end){
this.start=start;
this.end=end;
}
@Override
protected Long compute() {
if(end-start<THRESHOLD){
long sum=0;
for(long i=start;i<=end;i++){
sum+=i;
}
return sum;
}
else{
//大于临界值拆分任务
long mid=(start+end)/2;
ForkJoinCalculator forkJoinCalculator=new ForkJoinCalculator(start,mid);
forkJoinCalculator.fork();
ForkJoinCalculator forkJoinCalculator2=new ForkJoinCalculator(mid+1,end);
forkJoinCalculator2.fork();
return forkJoinCalculator.join()+forkJoinCalculator2.join();
}
}
public static void main(String[] args) {
//jdk7的fork,join使用
long start = System.currentTimeMillis();
ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<Long> forkJoinTask = forkJoinPool.submit(new ForkJoinCalculator(1, 10000000L));
try{
System.out.println(forkJoinTask.get());
}catch (Exception e){
e.printStackTrace();
}
Long sum=forkJoinPool.invoke(new ForkJoinCalculator(1, 10000000L));
System.out.println(sum);
long end=System.currentTimeMillis();
System.out.println("总共耗时为:"+(end-start));
//jdk8的并行流
start = System.currentTimeMillis();
sum=LongStream.rangeClosed(1,10000000L).parallel().reduce(0,Long::sum);
System.out.println(sum);
end=System.currentTimeMillis();
System.out.println("总共耗时为:"+(end-start));
}
}
运行结果:
猜你喜欢
- java8并行流处理实例
- java开源分布式任务调度框架xxl-job支持oracle实例
- java定时任务类Timer和TimerTask用法详解
- java开源时间框架joda-time简单使用的junit实例
- java开源图片框架Thumbnailator对图片各种处理的方法(可做到对原图片压缩仅改变大小)
- Java轻量级消息框架和整合平台mule ESB应用实例分享
- java通过Aspose.Word控件实现Word文档的操作
- HP-Socket java高性能TCP/UDP通信框架,java版,直接导入myeclipse即可测试
- java web开发教学任务管理信息系统源代码下载
- 【猪猪-后端】WebMagic框架搭建的爬虫,根据自定义规则,直接抓取,使用灵活,Demo部署即可查看。
- apache openjpa配置实例
- java定时任务删除过期文件
请下载代码后再发表评论
相关代码
最近下载
最近浏览
crosa_Don LV18
2022年6月1日
gaojian0612 LV2
2021年11月23日
qsyqa0 LV6
2021年9月5日
sularman LV2
2020年10月23日
taozero2008 LV3
2020年8月10日
wkc LV21
2020年7月26日
自导自演 LV17
2020年7月15日
随便取个名字_哈哈 LV27
2020年6月23日
bobo_sun LV5
2020年6月5日
taocui LV2
2020年5月19日





