news 2026/6/26 2:40:56

Java常见技术分享-21-多线程安全-进阶模块-并发集合与线程池-ForkJoinPool

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java常见技术分享-21-多线程安全-进阶模块-并发集合与线程池-ForkJoinPool

简介

它是Java中具体的线程池实现类, 实现了ExecutorService接口。
ForkJoinPool 的核心思想是 分治算法。它将一个大任务递归地拆分成多个足够小的子任务(Fork),然后并行执行这些子任务,最后将所有子任务的结果合并成一个总结果(Join)。

核心参数

  • 并行级别(parallelism) 期望的并发级别, 默认是CPU核心数, 最重要的参数, 表示期望同时运行的任务数多少
  • 核心线程数 corePoolSize
  • 最大线程数 maximumPoolSize
  • 工作模式asyncMode (第二重要的参数), 就两种模式, 栈(LIFO Last in First out)模式 和 队列(FIFO First in First out )模式

并行级别指导算法行为和任务拆分, 核心线程数和最大线程数控制线程资源的利用

核心流程 : 工作窃取(Work-Stealing)

  • 每一个工作线程都会维护一个双端队列, 用来存放自己生成的任务(Fork出来的子任务)
  • 线程优先从自己的队列的头部 取任务执行
  • 当某个线程发现自己的队列为空, 不会进入空闲 , 而是会随机选择另一个线程 ,从其队列尾部 “窃取” 一个任务来执行

核心流程就是上面的, 但是工作模式的不同, 细节上有一些区别。
比如

  • 如果是 栈模式, 任务会从 队列的头部 进, 也会从头部被取出来
    • 毕竟后进先出, 所以 如果是分治算法, 小的任务 一般在最后 就会被执行
  • 如果是 队列模式, 任务则从 队列的尾部 进, 同样从头部被取出来
    • 此时的模式 是先进先出, 严格保证 任务处理的顺序, 比较适合 事件处理。

需要注意的是, 不管是哪种模式 线程空闲的时候, 去窃取别的线程的任务时 都是窃取的队列尾部的任务, 因为不管哪个模式 队列尾部的 都比较老, 可能你会觉得队列模式 不是 从尾部放进去, 那不是新的吗? 但是 队列模式处理任务的时候是先进先出, 意味着 最后放进去的最后才会被处理, 尾部的任务可能已经等挺久的了。

核心类

  • ForkJoinPool本身, 管理线程和任务队列
  • ForKJoinTask, 他是所有在ForkJoinPool中运行的任务的父类, 就像任务模版。
  • ForKJoinTask的两个子类, RecursiveTask (有返回值 对标 Callable) 和 RecursiveAction (无返回值 对标Runnable) 只需要实现compute方法(写清楚如何拆分任务,执行小任务和合并结果)

栈模式

  • 后进先出, 优先处理分治算法中最新拆分的小任务, 小任务通常计算量小, 能快速完成,减少线程栈的内存占用。 然后后面处理大任务的时候内存更多,处理的速度也就更快。 适合处理任务之间没有什么依赖的场景

队列模式

  • 先进先出, 执行顺序稳定 ,适合处理任务之间有依赖的场景

应用场景

  • 适合处理可以拆分成大量小任务的大任务(比如大规模计算 ,批量数据处理), 尤其是当你利用“工作窃取”提高CPU利用率的时候。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 9:44:10

RePKG完整指南:Wallpaper Engine资源提取与转换深度解析

RePKG完整指南:Wallpaper Engine资源提取与转换深度解析 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG工具是一款专为Wallpaper Engine设计的资源管理工具&#…

作者头像 李华
网站建设 2026/6/10 17:52:27

WELearnHelper完整指南:轻松实现智能学习自动化

WELearnHelper完整指南:轻松实现智能学习自动化 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode.com/gh_m…

作者头像 李华
网站建设 2026/6/19 13:22:31

DOL-CHS-MODS汉化美化包完整使用指南:从下载到精通

DOL-CHS-MODS汉化美化包完整使用指南:从下载到精通 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想要彻底掌握DOL-CHS-MODS汉化美化包的使用方法吗?这份终极指南将带您从基…

作者头像 李华
网站建设 2026/6/16 16:09:39

3步彻底告别游戏卡顿:SOCD Cleaner让你操作如丝般顺滑

3步彻底告别游戏卡顿:SOCD Cleaner让你操作如丝般顺滑 【免费下载链接】socd SOCD cleaner tool for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否曾在激烈的对局中,因为同时按下左右方向键而让角色原地卡顿&#xff1f…

作者头像 李华
网站建设 2026/6/14 5:14:37

1.环境搭建

一.交叉编译器存放位置1. 系统级标准目录(推荐)这类目录是系统默认的 “软件工具” 存放位置,所有用户都能访问,适合全局使用的交叉编译器:/usr/local/:最常用的目录,通常会在其下创建子目录区分…

作者头像 李华
网站建设 2026/6/22 2:21:04

Hitboxer SOCD清理工具:游戏操作的无缝优化方案

在激烈的游戏对抗中,按键冲突往往成为玩家操作流畅度的主要障碍。Hitboxer作为一款专业的SOCD清理工具,通过智能算法彻底解决了这一技术难题,为游戏玩家带来前所未有的操作体验。 【免费下载链接】socd SOCD cleaner tool for epic gamers …

作者头像 李华