美文网首页
Java设计模式——Promise模式

Java设计模式——Promise模式

作者: 孙先森不可不弘毅 | 来源:发表于2018-07-11 20:54 被阅读0次

模式简介

Promise模式是一种异步编程模式 。它使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到我们需要该任务的执行结果时,再调用凭据对象的相关方法来获取。这样就避免了不必要的等待,增加了系统的并发性。

模式架构

Promise模式中,客户端代码调用某个异步方法所得到的返回值仅是一个凭据对象(该对象被称为Promise,意为“承诺”)。凭借该对象,客户端代码可以获取异步方法相应的真正任务的执行结果。

Promise类图
  • Promisor:负责对外暴露可以返回Promise对象的异步方法,并启动异步任务的执行。其主要方法及职责如下。
    • compute:启动异步任务的执行,并返回用于获取异步任务执行结果的凭据对象。
  • Promise:包装异步任务处理结果的凭据对象。负责检测异步任务是否处理完毕、返回和存储异步任务处理结果。其主要方法及职责如下。
    • getResult:获取与其所属Promise实例关联的异步任务的执行结果。
    • setResult:设置与其所属Promise实例关联的异步任务的执行结果。
    • isDone:检测与其所属Promise实例关联的异步任务是否执行完毕。
  • Result:负责表示异步任务处理结果。具体类型由应用决定。
  • TaskExecutor:负责真正执行异步任务所代表的计算,并将其计算结果设置到相应的Promise实例。其主要方法及职责如下
    • run:执行异步任务所代表的计算。

执行过程

获取异步任务处理结果

image.png
  • 第1步:客户端代码调用Promisor的异步方法compute。
  • 第2、3步:compute方法创建Promise实例作为该方法的返回值,并返回。
  • 第4步:客户端代码调用其所得到的Promise对象的getResult方法来获取异步任务处理结果。如果此时异步任务执行尚未完成,则getResult方法会阻塞(即调用方代码的运行线程暂时处于阻塞状态)。

异步任务执行过程

image.png
  • 第1步:Promisor的异步方法compute创建TaskExecutor实例。
  • 第2步:TaskExecutor的run方法被执行(可以由专门的线程或者线程池来调用run方法)。
  • 第3步:run方法创建表示其执行结果的Result实例。
  • 第4、5步:run方法将其处理结果设置到相应的Promise实例上。

Java多线程编程模式实战指南之Promise模式

相关文章

  • Java设计模式——Promise模式

    模式简介 Promise模式是一种异步编程模式 。它使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • Java 设计模式《概述》设计模式,如此简单~

    博客专栏 Java设计模式系列内容,就现在,让设计模式如此简单。 Java设计模式系列文章 Java 设计模式(一...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 了解外观模式

    java 设计模式 ------外观模式 Java中一共有23种设计模式,每种设计模式各有特...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

网友评论

      本文标题:Java设计模式——Promise模式

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