美文网首页
33 Fork Join 原理解读

33 Fork Join 原理解读

作者: 滔滔逐浪 | 来源:发表于2020-08-05 08:42 被阅读0次

    并发编程发展
    Java 1 支持thread,synchronized。
    Java 5 引入了 thread pools, blocking queues, concurrent collections,locks, condition queues。
    Java 7 加入了fork-join库。
    Java 8 加入了 parallel streams。 并行流:
    基本设计思想:
    Fork/JOin 是java7提供的并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总小任务的结果得到大任务结果的框架
    小任务可以继续不断拆分n多个小任务:


    image.png

    基本伪代码:
    if(任务很小)
    {
    直接计算得到结果
    }else{
    分拆出N个子任务
    调用子任务的fork()进行计算
    调用子任务的join()合并计算结果
    }
    工作窃取机制:
    将一个大的任务,拆分成n多个不同的子任务,一直到不可以拆分为止。
    例如: 将一个大的任务,差分成n多个子任务,每个任务中对应一个独立的队列。
    由于每个线程处理的速度不一样,如果先执行完成任务的队列的线程,窃取其他没有执行完任务的度列。

    相关APi 内容
    1,RecursiveAction:用于没有返回结果的任务
    2,RecursiveTask用于有返回结果的任务:
    Compute()方法计算:
    Fork()方法 Fork()方法类似于Threadstart(),但是他并不立即执行任务,而是将任务放入工作队列里,拆分子任务。
    join()合并子任务支持join 即任务结果的合并。
    通过invoke()方法提交任务,调用线程直到任务执行完毕才会返回,也就是说这是一个同步的方法,且有返回结果。

    同过execute方法提交的任务,调用线程会立即返回,也就是说这是一个异步方法,且没有返回结果。
    通过subbmit方法提交的任务,调用线程会立即返回,也就是说这是一个异步的方法,且有返回结果(返回Future实现类,可以通过get获取结果)
    ForkJOIN用法
    使用ForkJoin计算总和:

    
    
    
    

    相关文章

      网友评论

          本文标题:33 Fork Join 原理解读

          本文链接:https://www.haomeiwen.com/subject/ybgjrktx.html