zoukankan      html  css  js  c++  java
  • Java并发编程原理与实战三十二:ForkJoin框架详解

    1、Fork/Join框架有什么用呢?

    -------》Fork使用来切分任务,Join是用来汇总结果。举个简单的栗子:任务是1+2+3+...+100这个任务(当然这个任务的结果有好的算法去做,现在是用笨方法去计算这个结果)。
    ------》适合在多核环境下,单核环境使用ForkJoin没什么意思。简单来说就是,一个任务切割成多个小的任务,这些小的任务分配给多个CPU去执行,从而达到提高CPU的执行率。
    public class Demo extends RecursiveTask {
    
    private int begin;
    private int end;
    public Demo(int begin, int end) {
    this.begin = begin;
    this.end = end;
    }
    @Override
    protected Integer compute() {
    System.out.println(Thread.currentThread().getName() + " ... ");
    int sum = 0;
    // 拆分任务
    if (end - begin <= 2) {
    // 计算
    for (int i = begin; i <= end; i++) {
    sum += i;
    }
    } else {
    // 拆分
    Demo d1 = new Demo(begin, (begin + end) / 2);
    Demo d2 = new Demo((begin + end)/2 + 1, end);
    // 执行任务
    d1.fork();
    d2.fork();
    Integer a = d1.join();
    Integer b = d2.join();
    sum = a + b;
    }
    return sum;
    }
    
    public static void main(String[] args) throws Exception {
    ForkJoinPool pool = new ForkJoinPool(3);
    Future future = pool.submit(new Demo(1, 100));
    System.out.println("....");
    System.out.println("计算的值为:" + future.get());
    }
    }
    总结:
    -----》当我们的CPU不够强劲的时候,使用ForkJoin的话,会很损耗我们的CPU资源。不太适合我们小的PC电脑上运行,适合运行在Linux环境下的。
    我们要记住两点就基本可以了。
    1、在多核环境下,使用ForkJoin确实能提高执行性能
    2、能提高CPU的利用率
     
    个人感觉这个ForkJoin框架使用起来,还有有点难度的,开发人员只需要关注怎样用ForkJoin就可以了,则关注任务是怎样切分的。本人觉得怎样切,也是有点难度。-_-||   (还是看具体使用场景吧。。。)
     
    参考资料:
    《java并发编程与实战》龙果学院
  • 相关阅读:
    HashMap实现分析
    序列化与transient
    MySQL计划任务(事件调度器)(Event Scheduler)[转]
    利用innodb_force_recovery修复MySQL数据页损坏
    Java对Jar文件的操作[转]
    聚集索引与非聚集索引
    JVM学习(二)
    一句道破所有的springmvc(面试必备)
    springboot中的外界jar的引入:
    springboot中的springSession的存储和获取
  • 原文地址:https://www.cnblogs.com/pony1223/p/9502787.html
Copyright © 2011-2022 走看看