ForkJoin分支
ForkJoin
在jdk1.7,并行执行任务,提高效率,大数据量
把大任务拆分子任务 维护的都是双端队列
ForkJoin计算类
/** * 求和计算 * ForkJoin Stream并行流 * 1、forkJoinPool 通过它执行 * 2、计算任务forkJoinPool.execute(ForkJoinTask) * 3、计算类要继承 RecursiveTask */ public class ForkJoinDemo extends RecursiveTask<Long> { private Long start; private Long end; //临界值 private Long temp = 10000L; public ForkJoinDemo(Long start, Long end) { this.start = start; this.end = end; } @Override protected Long compute() { if ((end - start) < temp) { Long sum = 0L; for (Long i = start; i <= end; i++) { sum += i; } return sum; } else { //分支合并 Long middle = (start + end) / 2;//中间值 ForkJoinDemo task1 = new ForkJoinDemo(start, middle); task1.fork();//拆分任务,把任务压入线程队列 ForkJoinDemo task2 = new ForkJoinDemo(middle, end); task2.fork();//拆分任务,把任务压入线程队列 return task1.join() + task2.join(); } } }
测试
public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { //test1(); //时间:8178 //test2();//时间:7273 test3();//时间:207 } public static void test1() { Long sum = 0L; long start = System.currentTimeMillis(); for (Long i = 1L; i <= 10_0000_0000L; i++) { sum += i; } long end = System.currentTimeMillis(); System.out.println("sum=" + sum + "时间:" + (end - start)); } public static void test2() throws ExecutionException, InterruptedException { long start = System.currentTimeMillis(); ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinTask<Long> task = new ForkJoinDemo(1L, 10_0000_0000L); ForkJoinTask<Long> submit = forkJoinPool.submit(task);//提交任务 Long sum= submit.get(); long end = System.currentTimeMillis(); System.out.println("sum=" + sum+" 时间:" + (end - start)); } public static void test3() { long start = System.currentTimeMillis(); long sum = LongStream.rangeClosed(1L, 10_0000_0000L).parallel().reduce(0, Long::sum); long end = System.currentTimeMillis(); System.out.println("sum=" + sum+"时间:" + (end - start)); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端