-
Notifications
You must be signed in to change notification settings - Fork 187
异步编程——Promise
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
是一个空接口,它是 Action
和 Func
的父接口,Action
表示一个有参数无返回值的回调函数,Func
表示一个有参数有返回值的回调函数。
Thenable
接口包含有一个 then
方法,Promise
类是 Thenable
接口的一个实现。
Resolver
接口包含有一个 resolve
方法,Rejector
接口包含有一个 reject
方法,Executor
接口包含有一个 exec
方法,该方法的两个参数分别是 Resolver
和 Rejector
接口的对象,Promise
类是 Resolver
和 Rejector
接口的一个实现,并且包含有一个 Executor
参数的构造器。在介绍 Promise
构造器时会举例介绍该接口的使用方法。
Handler
接口是 Promise
类中的 forEach
,every
,some
,filter
,map
方法的回调参数类型。
Reducer
接口是 Promise
类中的 reduce
和 reduceRight
方法的回调参数类型。
Promise
类是 Promise
异步模型的主要实现类,后面将对该类进行详细的介绍。
PromiseFuture
类是对 Promise
类的一个 Future
接口包装。
Threads
是一个静态类,提供了一些关于线程管理的静态帮助方法,比如:获取所有线程,获取主线程,获取根线程组,注册 JVM 退出时回调函数并在主线程推出时结束整个程序。该类主要用于 Hprose 内部使用,用户可以不用关心该类,所以本文不对该类做详细介绍。
Timer
是一个计时器类,也是用于 Hprose 内部使用,本文也不对该类做详细介绍。
TypeException
是一个异常类,当 Promise
对象以它自己作为任务结束结果时,抛出该异常。
State
表示 Promise
对象的状态,包含有结果待定(PENDING
),已接受(FULFILLED
),已拒绝(REJECTED
)三种状态。