-
Notifications
You must be signed in to change notification settings - Fork 187
异步编程——Promise
小马哥 edited this page Jun 18, 2016
·
19 revisions
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+(中文版) 规范实现的,不过也有略微不同之处:
在 Promise/A+(中文版) 规范中,then 方法的 onFulfilled 和 onRejected 回调方法是异步执行的,且在 then 方法被调用的那一轮事件循环之后的新执行栈中执行。而在 Hprose for Java 的实现中,为了减少线程切换引起的不必要的性能损失,这部分并未严格遵守该规范。当执行 then 方法时,如果任务尚未完成,onFulfilled 和 onRejected 回调方法会在结束任务的线程中执行,如果任务已完成,则在执行 then 方法时,立即执行。
Hprose for Java 的 Promise
实现在 hprose.util.concurrent
包中,该包中包含有以下接口:
- Callback
- Action
- Func
- Thenable
- Rejector
- Resolver
- Executor
- Handler
- Reducer
类:
- Promise
- PromiseFuture
- Threads
- Timer
- TypeException
另外还有一个枚举类型:
- State
Hprose for Java 用户手册