news 2026/4/3 6:06:09

【Java并发】ForkJoinPool和ThreadPoolExecutor的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java并发】ForkJoinPool和ThreadPoolExecutor的区别

【Java并发】ForkJoinPool和ThreadPoolExecutor的区别

  • 1、ForkJoinPool和ThreadPoolExecutor的区别
  • 2、为什么CompletableFuture使用ForkJoinPool?

1、ForkJoinPool和ThreadPoolExecutor的区别

ForkJoinPool和ExecutorService都是Java中常用的线程池的实现,他们主要在实现方式上有一定的区别,所以也就会带来适用场景上面的区别。

首先在实现方式上,ForkJoinPool 是基于工作窃取(Work-Stealing)算法实现的线程池,ForkJoinPool 中每个线程都有自己的工作队列,用于存储待执行的任务。当一个线程执行完自己的任务之后,会从其他线程的工作队列中窃取任务执行,以此来实现任务的动态均衡和线程的利用率最大化。

ThreadPoolExecutor 是基于任务分配(Task-Assignment)算法实现的线程池,ThreadPoolExecutor 中线程池中有一个共享的工作队列,所有任务都将提交到这个队列中。线程池中的线程会从队列中获取任务执行,如果队列为空,则线程会等待,直到队列中有任务为止。

ForkJoinPool 中的任务通常是一些可以分割成多个子任务的任务,例如快速排序。每个任务都可以分成两个或多个子任务,然后由不同的线程来执行这些子任务。在这个过程中,ForkJoinPool 会自动管理任务的执行、分割和合并,从而实现任务的动态分配和最优化执行。


ForkJoinPool 中的工作线程是一种特殊的线程,与普通线程池中的工作线程有所不同。它们会自动地创建和销毁,以及自动地管理线程的数量和调度。这种方式可以降低线程池的管理成本,提高线程的利用率和并行度。

ThreadPoolExecutor 中线程的创建和销毁是静态的,线程池创建后会预先创建一定数量的线程,根据任务的数量动态调整线程的利用率,不会销毁线程。如果线程长时间处于空闲状态,可能会占用过多的资源。

在使用场景上也有区别,ThreadPoolExecutor 适合处理 IO 密集型或普通 CPU 任务,如网络请求处理、数据库访问、Web 服务请求调度。尤其是大量独立、不需要拆分的小任务

ForkJoinPool 适合于 CPU 密集型、可拆分的并行计算任务:

  1. 大任务分解为小任务:适用于可以递归分解为更小任务的大型任务。ForkJoinPool 通过分而治之的方式,将大任务拆分为小任务,这些小任务可以并行处理。
  2. 计算密集型任务:对于需要大量计算且能够并行化的任务,ForkJoinPool 是一个理想的选择。它能够有效利用多核处理器的优势来加速处理过程。
  3. 递归算法的并行化:适合于可以用递归方法解决的问题,如快速排序、归并排序、图像处理中的分区算法等。
  4. 数据聚合任务:在处理需要聚合多个数据源结果的任务时(例如,遍历树结构并聚合结果),ForkJoinPool 提供了有效的方式来并行化这一过程。

2、为什么CompletableFuture使用ForkJoinPool?

CompletableFuture 使用 ForkJoinPool 而不是 ExecutorService 的原因主要是因为它的执行模型和任务分割方式与 ForkJoinPool 更加匹配。

在 CompletableFuture 中,一个任务可以分割成多个子任务,并且这些子任务之间可以存在依赖关系。而ForkJoinPool 本身就是一种支持任务分割和合并的线程池实现,能够自动地处理任务的拆分和合并。而且,ForkJoinPool 还有一种工作窃取算法,能够自动地调整线程的负载,提高线程的利用率和并行度。

ForkJoinPool 还有一个特点,就是它的线程池大小是动态调整的。当任务比较少时,线程池的大小会自动缩小,从而减少了线程的数量和占用的系统资源。当任务比较多时,线程池的大小会自动增加,从而保证任务能够及时地得到执行。

如果使用 ExecutorService 来执行这些任务,需要手动地创建线程池、任务队列和任务执行策略,并且需要手动地处理任务的拆分和合并,实现起来相对比较复杂。

因此,ForkJoinPool 更加适合 CompletableFuture 的执行模型。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 5:12:58

第 3 篇:双缓冲模式 (Double Buffering) —— 榨干 DMA 的性能

前两篇我们分别解决了“内存怎么分”和“模块怎么管”的问题。今天这一篇,我们要解决嵌入式开发中最硬核、也最考验功底的性能问题——数据吞吐量。 当你的波特率飙升到 2Mbps,或者 ADC 采样率达到 1Msps 时,单纯靠中断(ISR&…

作者头像 李华
网站建设 2026/3/20 18:52:21

UVa 150 Double Time

题目描述 儒略恺撒于公元前 454545 年采用了一种标准历法,每年 365365365 天,每四年增加一天(222 月 292929 日)。但这一历法并不完全准确,季节的开始时间在一年中逐渐偏移。158215821582 年,教皇格里高利…

作者头像 李华
网站建设 2026/4/1 2:01:35

2026年精选云游戏平台推荐 热门手机云电脑app免费秒玩千款游戏

随着云端算力规模化普及,云电脑已成为解决低配设备升级、多端协同办公、专业创作与高清娱乐的核心解决方案。面对市场繁杂产品,如何基于场景需求锁定最优配置?这份2026实测优选指南,从核心选型逻辑到分场景精准推荐,帮…

作者头像 李华
网站建设 2026/4/1 3:15:46

670次问答、108个负反馈:一个工控知识库POC根因分析与优化方向

前两天知识星球里有个盆友提了个很典型的问题:系统做出来了,业务部门测了一圈反馈效果不行,但给不出具体指标。技术这边不知道该怎么下手调优,也不知道该用什么数据去跟领导汇报,在这个阶段是该申请更多资源支持还是调…

作者头像 李华
网站建设 2026/3/31 1:52:35

企业人力效率提升关键:一体化 HR 系统的降本增效原理

在市场竞争日趋激烈的当下,企业对降本增效的需求愈发迫切,而人力资源管理作为企业运营的核心环节,其效率高低直接影响企业整体竞争力。传统 HR 管理模式中,招聘、薪酬、绩效等模块相互割裂,数据不通、流程繁琐等问题不…

作者头像 李华
网站建设 2026/3/27 10:05:59

计算机毕业设计之springboot大学生旧货交易平台设计与实现

伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套大学生旧货交易平台设计与实现,帮助卖家进…

作者头像 李华