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;
    }
}

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

相关推荐
咘噜biu2 分钟前
Java 安全的打印对象数据到日志
java·json·日志·脱敏
曹牧2 分钟前
Eclipse 中 SVN 操作指南
java·svn·eclipse
阿里嘎多学长6 分钟前
2025-12-15 GitHub 热点项目精选
开发语言·程序员·github·代码托管
填满你的记忆7 分钟前
Gemini使用教程
java·后端·ai编程
一只乔哇噻7 分钟前
java后端工程师+AI大模型开发进修ing(研一版‖day63)
java·开发语言·人工智能·python·语言模型
风月歌8 分钟前
小程序项目之使命召唤游戏助手源代码(java+vue+小程序+mysql)
java·mysql·小程序·毕业设计·源码
小白学大数据8 分钟前
从爬取到分析:使用 Pandas 处理头条问答数据
开发语言·爬虫·python·pandas
爱吃大芒果9 分钟前
Flutter 状态管理全家桶:Provider、Bloc、GetX 实战对比
开发语言·前端·javascript·flutter·华为·ecmascript
_OP_CHEN12 分钟前
【从零开始的Qt开发指南】(十)Qt 常用控件之输入类控件全攻略:7 大控件从入门到实战,覆盖所有输入场景
开发语言·c++·qt·前端开发·qt常用控件·gui图形化界面·qt输入类控件
想不明白的过度思考者15 分钟前
Java网络聊天室——OverThinker-ChatRoom
java·开发语言·网络