木头人
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开源时间框架joda-time简单使用的junit实例
- java定时任务类Timer和TimerTask用法详解
- java定时任务删除过期文件
- Java高效开发框架nutz入门实例代码
- spring+quartz实现定时任务(入门小实例)
- java web开发教学任务管理信息系统源代码下载
- Java轻量级消息框架和整合平台mule ESB应用实例分享
- java swing框架demo实例
- java中任务调度java.util.Timer,ScheduledExecutor,Quartz的机制说明和demo代码实例分享
- java实现国际化I18N简单实例,没用任何框架
请下载代码后再发表评论
相关代码
最近下载
最近浏览
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日