木头人
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日