浅谈ForkJoin

浅谈ForkJoin文章目录一 ForkJoin 是什么 它能用来实现什么功能 二 ForkJoin 的实现原理三 ForkJoin 的简单使用一 ForkJoin 是什么 它能用来实现什么功能 二 ForkJoin 的实现原理三 ForkJoin 的简单使用在这里插入代码片


一、ForkJoin是什么?它能用来实现什么功能?

ForkJoin也是一种线程池,只不过ForkJoin是专为CPU密集型任务而建立的线程池,它能大大提高CPU密集型任务的执行效率。

二、ForkJoin的实现原理

三、ForkJoin的简单使用

package com.muyichen.demo.forkjoin; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; import java.util.concurrent.RecursiveTask; @Slf4j public class ForkJoinExample extends RecursiveTask<Integer> { 
     public static final int threshold = 2; private int start; private int end; public ForkJoinExample(int start, int end) { 
     this.start = start; this.end = end; } @Override protected Integer compute() { 
     int sum = 0; //如果任务足够小就计算任务 boolean canCompute = (end - start) <= threshold; if (canCompute) { 
     for (int i = start; i <= end; i++) { 
     sum += i; } } else { 
     // 如果任务大于阈值,就分裂成两个子任务计算 int middle = (start + end) / 2; ForkJoinExample leftTask = new ForkJoinExample(start, middle); ForkJoinExample rightTask = new ForkJoinExample(middle + 1, end); // 执行子任务 leftTask.fork(); rightTask.fork(); // 等待任务执行结束合并其结果 int leftResult = leftTask.join(); int rightResult = rightTask.join(); // 合并子任务 sum = leftResult + rightResult; } return sum; } public static void main(String[] args) { 
     ForkJoinPool forkjoinPool = new ForkJoinPool(); //生成一个计算任务,计算1加到100 ForkJoinExample task = new ForkJoinExample(1, 100); //执行一个任务 Future<Integer> result = forkjoinPool.submit(task); try { 
     log.info("result:{}", result.get()); } catch (Exception e) { 
     log.error("exception", e); } } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230664.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号