Java Future 教程展示了如何使用 Future 在 Java 中进行异步编程。
Future
表示异步计算的结果。 提供了一些方法来检查计算是否完成,等待其完成以及检索计算结果。 简而言之,一旦某个操作完成,就有望保留该操作的结果。 Future
是 Java 5 中引入的。
该值是使用get()
从将来检索的,该值将阻塞直到值准备就绪。
FutureTask
类是实现Runnable
的Future
的实现,因此可以由Executor
执行。
期货有几个缺点。 例如,它们无法手动完成,并且它们不会在完成时通知。 期货不能被链接和组合。 另外,没有异常处理。 为了解决此缺点,Java 8 引入了CompletableFuture
。
Java Future 示例
以下示例使用期货来计算阶乘。
com/zetcode/FactorialCalculator.java
FactorialCalculator
使用BigInteger
计算阶乘。
FactorialCalculator
实现了Callable
。 Callable
代表返回结果的异步任务。 在我们的例子中,结果是计算的阶乘。
我们稍微减慢了计算速度。
com/zetcode/JavaFutureEx.java
我们生成六个随机整数并计算它们的阶乘。
执行程序服务处理异步任务的生命周期。 它的submit()
可以接受Runnable
和Callable
对象。
创建一个FactorialCalculator
任务。 它将异步运行。
我们将任务提交给执行者。 我们将整数值和期货放置在映射上,以便手边有值和计算出的阶乘。
我们浏览结果列表。 请注意,期货在计算其价值之前会迅速返回。
我们得到了一对的钥匙。
使用钥匙,我们将拥有未来。 当我们调用get()
时,处理被阻塞,直到检索到该值为止。
这是一个示例输出。