zoukankan      html  css  js  c++  java
  • 九 fork/join CompletableFuture

    1: Fork/join

    fork/join:  fork是分叉的意思, join是合并的意思。

    Fork/Join框架:是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

    Fokr/Join的适合场景:所处理的元素必须是独立的,数据集要足够大;

                                         并且在并行加速方面,每个元素的处理成本要足够高,这样才能补偿建立fork/join框架所消耗的成本。

    这个文章中的例子(http://www.infoq.com/cn/articles/Functional-Style-Callbacks-Using-CompletableFuture)很好的说明了 Future, ExecutorCompletionService,

    CompletableFuture处理一个图片下载的例子时候的对比。

    2: Future:

         Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值;

         要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背;

          Future本身并不能提供回调方法.  任务提交到executor,通过Future.isDone和阻塞的Future.get()来看结果是否完成。

    3: ExecutorCompletionService

         把多个FutureTask提交到ExecutorCompletionService,task执行完的结果放到queue中,ExecutorCompletionService.get() 或者,poll()会从队列中依次取得

         执行完的task, 再进行下一步处理。(这个方法比上面的方法好,上面只能是按照提交的顺序依次判断结果是否完成)

    3: CompletableFuture

           它能够将回调放到与任务不同的线程中执行(thenApplyAsync),也能将回调作为继续执行的同步函数(thenApply),在与任务相同的线程中执行。

           它避免了传统回调最大的问题,那就是能够将控制流分离到不同的事件处理器中(thenApplyAsync()可以异步的在不同的线程中处理上一步结果)

     4: CompletableFutre详解

    待续... ...

    5: java 8的 paralleStream 用 fork/join框架提供了并发执行能力。

    待续... ...

    6: 

    https://www.cnblogs.com/tian666/p/7840232.html

  • 相关阅读:
    查看uCOS-II的CPU使用率
    ARM的工作环境和工作模式
    一个简单的 JSON 生成/解析库
    [转] libtool的作用及应用
    Qt 使用 net-snmp 包的过程记录
    Qt 立体水晶按键实现
    xampp 修改 mysql 默认 root 密码
    mint 设置无线 AP
    dpkg 小记
    转-ubuntu清理卸载wine的残余项目
  • 原文地址:https://www.cnblogs.com/liufei1983/p/8313431.html
Copyright © 2011-2022 走看看