文章目录

  • Pre
  • 使用工厂方法 supplyAsync创建 CompletableFuture
  • 对比


Pre

Java8 - 使用CompletableFuture 构建异步应用

目前为止我们已经了解了如何通过编程创建 CompletableFuture 对象以及如何获取返回值,虽然看起来这些操作已经比较方便,但还有进一步提升的空间, CompletableFuture 类自身提供了大量精巧的工厂方法,使用这些方法能更容易地完成整个流程,还不用担心实现的细节。

可以看到我们使用new Thread的方式,显然是不恰当的。


使用工厂方法 supplyAsync创建 CompletableFuture

采用 supplyAsync 方法后,可以用一行代码重写getPriceAsync 方法。

【使用工厂方法 supplyAsync 创建 CompletableFuture 对象】

public Future<Double> getPriceAsync(String product) {return CompletableFuture.supplyAsync(() -> calculatePrice(product));
}

supplyAsync 方法接受一个生产者( Supplier )作为参数,返回一个 CompletableFuture对象,该对象完成异步执行后会读取调用生产者方法的返回值。

生产者方法会交由 ForkJoinPool池中的某个执行线程( Executor )运行,但是你也可以使用 supplyAsync 方法的重载版本,传递第二个参数指定不同的执行线程执行生产者方法。

一般而言,向 CompletableFuture 的工厂方法传递可选参数,指定生产者方法的执行线程是可行的,后面我们会会介绍如何使用适合你应用特性的执行线程改善程序的性能。


对比

刚刚的代码

public Future<Double> getPriceAsync(String product) {return CompletableFuture.supplyAsync(() -> calculatePrice(product));
}

getPriceAsync 方法返回的 CompletableFuture 对象和 下面的代码

public Future<Double> getPriceAsync(String product) {CompletableFuture<Double> futurePrice = new CompletableFuture<>();new Thread( () -> {try {double price = calculatePrice(product);futurePrice.complete(price);} catch (Exception ex) {futurePrice.completeExceptionally(ex);}}).start();return futurePrice;
}

手工创建和完成的 CompletableFuture 对象是完全等价的,这意味着它提供了同样的错误管理机制,而前者你花费了大量的精力才得以构建。

Java8 - 使用工厂方法 supplyAsync创建 CompletableFuture相关推荐

  1. Factory Method (工厂方法)---对象创建型模型

    意图: 定义一个创建对象的接口,让子类决定实例化哪一个类. 别名: 虚构造器. 动机: 框架 使用 抽象类定义和维护对象之间的关系.这些对象的创建也由框架负责. 适用性: 当一个类,不知道它所必须创建 ...

  2. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  3. 创建型模式--工厂方法模式

     概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.FactoryMethod使一个类的实例化延迟到其子类.  适用性 1.当一个类不知道它所必须创建的对象的类的时候.2.当一个类希望由它的 ...

  4. 3.Factory Method 工厂方法模式(创建型模式)

    1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary>/// 工厂方法 ...

  5. [设计模式-创建型]工厂方法(Factory Method)

    概括 名称 Factory Method 结构 动机 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性 当一个类不知道它所必 ...

  6. 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)

    创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...

  7. 设计模式(2)工厂方法模式(Factory Method)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 源码地址 0 工厂方法模式简介 0.0 工厂方法模式定义 工厂方法模式是在简单工厂模式基础上,为解决更复杂的对象创建问题而衍生 ...

  8. 《转》java设计模式--工厂方法模式(Factory Method)

    本文转自:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html 工厂方法模式(别名:虚拟构造) 定义一个用于创建对象 ...

  9. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

    工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较复杂,例如需 ...

最新文章

  1. python中使用中文字符,文件首行添加# -*- coding: utf-8 -*-后仍然报错(unicode error) ‘utf-8‘ codec can‘t decode byte 0xc4
  2. php连接数据库语言,PHP语言连接MYSQL数据库实例代码
  3. docker 安装mysql 5.7
  4. 系统架构师学习笔记-软件架构设计
  5. 前端开发 选择器的优先级 0229
  6. IOS数据存储 —— 1 沙盒(数据存储目录)
  7. Kubernetes 证书过期
  8. ik做尾巴摆动 maya_maya中使用节点做IK骨骼的拉伸
  9. Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)
  10. 使用浏览器从网页下载音频文件
  11. netsetman使用教程_NetSetMan配置网络参数教程
  12. 苹果计算机没有根号,计算器根号,在iphone自带的计算器上怎样打出根号
  13. 2021-08-04
  14. 太极拳什么时间练习最适宜
  15. 转载:24岁,我终于有了我自己的公司(一个深圳创业者故事)
  16. 实习小结·改进代码(解决爆栈问题)
  17. QImage 图片分割、保存
  18. STM32-APDS9960手势识别
  19. 再回首2014的精彩
  20. June 11th 模拟赛C T1 Sandcas Solution

热门文章

  1. 强化学习笔记: backup diagram
  2. tableau可视化数据分析60讲(二十)-tableau格式设置
  3. 深度学习核心技术精讲100篇(四十二)-Seq2seq框架下的文本生成
  4. django权限系统实现步骤_Django权限机制的实现
  5. c++求解自行车慢速比赛问题_一元一次方程应用专题,十大题型(包括数轴上动点问题)...
  6. python常用_Python常用小技巧
  7. MATLAB对字符串进行分割
  8. 自定义起始时间的时间戳计算(个人代码记录)
  9. Hadoop中-put和-copyFromLocal的区别
  10. arcgis-把X Y点展到arcgis中的陷阱