ToB企服应用市场:ToB评测及商务社交产业平台

标题: JUC并发编程学习(十三)ForkJoin [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2023-12-6 18:54
标题: JUC并发编程学习(十三)ForkJoin
ForkJoin

什么是ForkJoin
ForkJoin在JDK1.7,并发执行任务!大数据量时提高效率。
大数据:Map Reduce(把大任务拆分成小任务)

ForkJoin特点:工作窃取

为什么可以取窃取其他线程的任务呢?因为这里面维护的都是双端队列(即队列的两端都可以取元素)
ForkJoin操作
在java.util.concurrent下的接口摘要中,有以下两个接口


点进其中一个找到具体的类,可以看到ForkJoinPool

这是具体的执行类,就像ThreadPoolExecutor

具体的执行通过ForkJoinTask类来执行

使用ForkJoin
1、需要一个ForkJoinPool,通过execute方法来执行,参数为ForkJoinTask
2、计算任务 forkJoinPool.execute(ForkJoinTask task)
3、定义一个ForkJoinTask

如何去定义一个ForkJoinTask,打开jdk文档,找到ForkJoinTask类,查看具体的子类。

其中递归事件没有返回值,而任务肯定要有结果,所以递归任务是有返回值的
点进任务,查看示例

代码示例:
[code]package org.example.forkjoin;/** 求和计算的任务*** 程序员的三六九等* 三(普通求和)、六(ForkJoin)、九(Stream并行流)*** 使用ForkJoin:* 1、ForkJoinPoll 通过他来执行* 2、计算任务 forkJoinPool.execute(ForkJoinTask task)* 3、定义一个ForkJoinTask*** */import java.util.concurrent.RecursiveTask;public class ForkJoinDemo extends RecursiveTask {    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)




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4