Future

JDK自1.5起引入了Future接口用于描述异步计算结果。Future提供了多种方法用于获取异步计算结果或强行中断task,典型用法如下:

public static void FutureExample() {
    Future future = executor.submit(task);
    try {
        future.get();
    } catch (InterruptedException e) {
        ...
    }
}

Future孱弱的语义在JDK1.8中得到了增强:通过ComputableStage接口的ComputableFuture类。它帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。

  • ComputableFuture提供了使Future完成的方法。
  • ComputableFuture提供了then、combine等新的语义,使得并发编程更为简单。

如何使用

与JDK8所提供的流式计算一样,使用ComputableFuture是一种完全不同的体验。 首先,忘掉Thread、Executor、线程竞争与同步等概念,让我们以一种另外的视角来看待我们的程序。每一段程序都可以被分解为许许多多简单的小任务,把这些小任务按照一定的顺序和逻辑组织编排起来,就能使计算机按照我们想要的方式运行。

以一个简单的程序为例:程序接受一个字符串输入,然后程序会去掉A的前后空格,最后将整个字符串都转换为小写并输出。 程序的运行过程如下: programe1