Skip to content

异步编程——Promise

小马哥 edited this page Jun 19, 2016 · 19 revisions
Promises/A+ logo

概述

Java 提供了一套 Future 异步模型,但是在 Java 8 之前只能通过 Get 方法来同步获取结果,而不能通过回调方式来异步获取结果。Java 8 增加了 CompletableFuture,可以通过回调来获取结果,这种就是 Promise 异步模型。但是仅能在 Java 8 中才能使用。

当然 Guava、Netty 4+ 等 Java 框架也提供了 Promise 异步模型的实现。但是最低支持的 JDK 版本是 Java 6,对 Java 5 并不支持。

Hprose 为了更好的实现异步服务和异步调用,也提供了一套 Promise 异步模型实现。它基本上是参照 Promise/A+(中文版) 规范实现的。

Hprose for Java 的 Promise 实现在 hprose.util.concurrent 包中,该包中包含有以下接口:

  • Callback
  • Action
  • Func
  • Thenable
  • Rejector
  • Resolver
  • Executor
  • Handler
  • Reducer

类:

  • Promise
  • PromiseFuture
  • Threads
  • Timer
  • TypeException

另外还有一个枚举类型:

  • State

其中,Callback 是一个空接口,它是 ActionFunc 的父接口,Action 表示一个有参数无返回值的回调函数,Func 表示一个有参数有返回值的回调函数。

Thenable 接口包含有一个 then 方法,Promise 类是 Thenable 接口的一个实现。

Resolver 接口包含有一个 resolve 方法,Rejector 接口包含有一个 reject 方法,Executor 接口包含有一个 exec 方法,该方法的两个参数分别是 ResolverRejector 接口的对象,Promise 类是 ResolverRejector 接口的一个实现,并且包含有一个 Executor 参数的构造器。在介绍 Promise 构造器时会举例介绍该接口的使用方法。

Handler 接口是 Promise 类中的 forEacheverysomefiltermap 方法的回调参数类型。

Reducer 接口是 Promise 类中的 reducereduceRight 方法的回调参数类型。

Promise 类是 Promise 异步模型的主要实现类,后面将对该类进行详细的介绍。

PromiseFuture 类是对 Promise 类的一个 Future 接口包装。

Threads 是一个静态类,提供了一些关于线程管理的静态帮助方法,比如:获取所有线程,获取主线程,获取根线程组,注册 JVM 退出时回调函数并在主线程推出时结束整个程序。该类主要用于 Hprose 内部使用,用户可以不用关心该类,所以本文不对该类做详细介绍。

Timer 是一个计时器类,也是用于 Hprose 内部使用,本文也不对该类做详细介绍。

TypeException 是一个异常类,当 Promise 对象以它自己作为任务结束结果时,抛出该异常。

State 表示 Promise 对象的状态,包含有结果待定(PENDING),已接受(FULFILLED),已拒绝(REJECTED)三种状态。

Clone this wiki locally