Java多线程之Fork Join框架

版权声明:本文为神州灵云作者的原创文章,未经神州灵云允许不得转载。

本文作者:Kevin

引言:
相比传统顺序编程,多线程并发编程在运行效率有这巨大的优势,但是由于线程资源的共享,线程同步等问题,多线程编程的难度也要高许多。Java是最先支持多线程的开发的语言之一,Java 提供了许多方便好用的多线程并发方法,理解并合理地运用它们,会让我们在开发中受益匪浅。Fork/Join框架就是一个充分利用多线程优势,集“分治”与“并行”一体的并发框架。

1. Fork/Join框架思想
Fork/Join框架从名字就可以初见端倪,Fork(分支)的意思是将任务分离,Join(合并)将结果合并。Fork/Join框架的核心思想是“分治”,将一个问题分解为多个小问题,这些问题相互独立,得到所有小问题的结果后就可以得到整个问题的结果。
1.jpg

在传统编程中,我们可以采取递归的方式实现具有一定规律的问题分治,但是由于频繁的函数调用,栈切换,递归的运行效率十分低下。Fork/Join框架提供了分治问题的多线程并发解决方案,提供了高效的实现。

2. Fork/Join框架原理
Fork/Join框架建立在Java线程池的基础之上,主要通过ForkJoinPool,ForkJoinTask类实现:
2.jpg

ForkJoinPool是ExecutorService的实现类,是一种特殊的线程池,ForkJoinTask则是ForkJoinPool线程池可接受的任务对象,分为RecursiveTask(带执行结果的任务)和RecursiveAction(没有执行结果的任务)。 ForkJoinPool接收提交的ForkJoinTask,为任务及其分支子任务分配线程。

3. 关于线程池
ForkJoinPool是一种特殊的线程池,要了解它得先了解Java线程池,这里只大致展示Java线程池的结构,不做深入分析。
3.jpg

线程池内维护一个核心池,每次有任务提交,会提供一个线程执行任务,直至池中线程数量达到最大值,之后无法立即执行的任务会被存放到任务队列内(workQueue),池内任务完成后再从队列中取出任务继续执行。

线程池的线程生成销毁策略,队列类型,最大核心池数量,任务拒绝策略等都是可配置的,使得Java线程池可以应对不同的场景与问题。而ForkJoinPool就是其中的一种实现。

4. Fork/Join实现</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值