ForkJoin简单示例
import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; import java.util.concurrent.RecursiveTask; public class CountTaskForkJoinTest extends RecursiveTask<Long> { private static final long serialVersionUID = 1L; private static final int threshold = 100;//临界值 private long start; private long end; public CountTaskForkJoinTest(long start, long end) { this.start = start; this.end = end; } /** * 重写compute方法,判断是否将任务进行拆分计算 */ @Override protected Long compute() { long sum = 0; //判断是否是拆分完毕 boolean canCompute = (end - start) <= threshold; if (canCompute) { for (long i = start; i <= end; i++) { sum += i; } } else { long middle = (start + end) / 2; CountTaskForkJoinTest task1 = new CountTaskForkJoinTest(start, middle); CountTaskForkJoinTest task2 = new CountTaskForkJoinTest(middle, end); task1.fork(); task2.fork(); long result1 = task1.join(); long result2 = task2.join(); sum = result1 + result2; } return sum; } /** * ForkJoin实现,返回计算结果 * @param start 起始值 * @param end 结束值 * @return * @throws InterruptedException * @throws ExecutionException */ private static long forkJoinTest(long start, long end) throws InterruptedException, ExecutionException { ForkJoinPool pool = new ForkJoinPool(); CountTaskForkJoinTest task = new CountTaskForkJoinTest(start, end); Future<Long> result = pool.submit(task); return result.get(); } public static void main(String[] args) throws InterruptedException, ExecutionException { long start_index = 1; long end_index = 50; long ret = forkJoinTest(start_index, end_index); System.out.println("result: " + ret); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?