java多线程中的Fork和Join

文章目录

    • [1. 简介](#1. 简介)
    • [2. 使用](#2. 使用)

1. 简介

Fork/Join是JDK 1.7中加入的新的线程池的实现,它体现的使用分治的思想,适用于能够进行任务拆分的cpu密集型任务。所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直到不能拆分可以直接求解。Fork/Join载分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率。Fork/Join默认会创建于cpu核心大小相同的线程池。

2. 使用

java 复制代码
public class TestFinal {
    public static void main(String[] args) {
        //创建线程池,里面有四个线程
        ForkJoinPool pool = new ForkJoinPool(4);
        //执行任务
        System.out.println(pool.invoke(new MyTask(5)));
        /**
         * 任务拆分 new MyTask(5)= 5+ {new MyTask(4)=4+new MyTask(3)....}
         */
    }
}

//1. 继承父类RecursiveTask,范型时Integer即任务结果的返回值,下面任务时计算1-100的和
class MyTask extends RecursiveTask<Integer> {
    private int n;

    public MyTask(int n) {
        this.n = n;
    }

    @Override
    protected Integer compute() {
        if (n == 1) {
            return 1;
        }
        MyTask myTask = new MyTask(n - 1);
        myTask.fork(); //让另外一个线程去执行这个结果
        int result = n + myTask.join(); //获取另一个线程的结果
        return result;
    }
}

任务执行的结果实际如下所示:

相关推荐
星辰_mya1 分钟前
领域驱动设计(DDD)“老中医”治理订单
java·后端·面试·架构
知识分享小能手8 分钟前
R语言入门学习教程,从入门到精通,集成开发环境RStudio(2)
开发语言·学习·r语言
葛兰岱尔11 分钟前
葛兰岱尔rapid3D Loader for Three.js使用方式及7个基础API说明
开发语言·javascript·3d
毋语天19 分钟前
Python 进阶:元组、字典、集合与函数全解析
开发语言·python
学习中.........27 分钟前
操作系统底层原理、Java API 封装、以及高性能软件架构模式
java·开发语言
IT当时语_青山师__JAVA技术栈28 分钟前
动态代理深度解析:JDK与CGLIB底层实现与实战
java·后端·面试
吃不胖爹28 分钟前
定时任务quartz案例
java
SamDeepThinking29 分钟前
别人写的代码看不懂,到底是谁的水平有问题
java·后端·程序员
白露与泡影30 分钟前
2026年Java面试最全避坑指南:从基础、并发、JVM到微服务,这一篇就够了
java·jvm·面试
Mr数据杨34 分钟前
【Codex】用APP绑定教程模块规范移动端接入指引
java·前端·javascript·django·codex·项目开发