Java fork join ForkJoinPool 用法例子
本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
技术:JDK8.0, Java fork-join模式下的RecursiveTask技术,override compute().
- /**
- * Author: Bigtree
- * 本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
- * 技术:
- * java fork-join模式下的RecursiveTask技术,override compute().
- */
- import java.util.*;
- import java.util.concurrent.*;
- class Caltask extends RecursiveTask<Long>{
- private static final int THRESHOLD = 1000; //how many numbers one thread can calculate
- private long data[];
- private int start;
- private int end;
- public Caltask(long[] inputData,int start, int end){
- data=inputData;
- this.start=start;
- this.end=end;
- }
- @Override
- protected Long compute() {
- Long sumResult=0L;
- if((end - start) <= THRESHOLD ){
- for(int index=start; index<end;index++) {
- sumResult += data[index];
- }
- }
- else { //parallel computing
- int step=(end-start)/THRESHOLD;
- if(((end-start)%THRESHOLD)>0)
- step+=1;
- ArrayList<Caltask> tasks = new ArrayList<>();
- int pos=start;
- int lastposition;
- for(int i=0;i<step;i++){
- lastposition=pos+THRESHOLD;
- if(lastposition>end)
- lastposition=end;
- Caltask onetask= new Caltask(data,pos,lastposition);
- pos=lastposition;
- tasks.add(onetask);
- onetask.fork();
- }
- for(Caltask mtask : tasks){
- sumResult += mtask.join();
- }
- }
- return sumResult;
- }
- }
- public class forkjoincompute {
- public static void ForkJoinShow(){
- long data[] = new long[20001];
- for(long i=0;i<data.length;i++){
- data[(int) i]= i + 1;
- }
- ForkJoinPool mypool= ForkJoinPool.commonPool();
- Future<Long> myfuture = mypool.submit( new Caltask(data,0,data.length));
- try{
- long result=myfuture.get();
- System.out.println("forkjoincompute():computed final result="+result);
- } catch(InterruptedException e){
- e.printStackTrace();
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mypool.shutdown();
- }
- }
输出结果:
forkjoincompute():computed final result=200030001
分类:
android提高篇
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!