线程工具之fork-join

Fork-join

fork-join是一个多线程并发工具,但是它屏蔽了多线程相关知识,只要遵循其开发模式即可.
其核心思想为–分而治之.在十大经典算法中,快速排序、归并排序、二分查找,还有大数据中的R/M都是使用该思想.

  1. 分治法设计思想:将一个难以解决的大问题,分割成n个小问题,而且n个小问题之间没有关联关系,独立且与原问题形式相同(子问题之间如果有关系,则变为动态规划算法),每个小问题的结果合并得到原大问题的解.
  2. Fork-Join原理
    在这里插入图片描述
  3. 工作密取
    即当前线程task做完了,则自动获取其他线程的task来执行,这样能加快任务的处理速度,减少线程的阻塞和闲置时间,提高CPU利用率.
    在这里插入图片描述
Fork-Join实战
  1. Fork-Join使用标准范式
    我们使用Fork-Join框架时,必须要创建一个ForkJoin任务,它提供在任务中执行的fork和join机制,通常情况下我们不直接继承ForkjoinTask类,只需要继承其子类即可.
    ①RecursiveAction,用于没有返回值的任务
    ②RecursiveTask,用于有返回值的任务
    task是要通过ForkjoinPool来执行的,用submit和invoke来提交。两者区别是:
    ①invoke是同步提交,需要等待结果完成才返回
    ②submit是异步提交
    join()和get()方法当任务完成时候返回计算结果.
    工作范式示意图:
    在这里插入图片描述

我们会在compute方法内判断每个子任务是否已经够小,如果足够小,则直接执行任务,如果不够小,那就必须要分隔成两个小任务,每个子任务调用invokeAll方法时,会再次进入compute重新判断.使用join方法即等待子任务执行完并得到结果
代码示例:

public class SumArray {
   
    private static clas
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值