从JDK 8开始,在Concurrent包中提供了一个强大的异步编程工具CompletableFuture。在JDK8之 前,异步编程可以通过线程池和Future来实现,但功能还不够强大 内部实际上是 ForkJoinPool

    代码 码云代码

    提交给CompletableFuture执行的任务有四种类型:Runnable、 Consumer、Supplier、Function。下面是这四种任务原型的对比。

    四种任务原型 无参数 有参数
    无返回值 Runnable接口
    对应的提交方法:runAsync,thenRun
    Consumer接口
    对应的提交方法:thenAccept
    有返回值 Supplier接口:
    对应的提交方法:supplierAsync
    Function接口
    对应的提交方法:thenApply
    • runAsync 与 supplierAsync 是 CompletableFuture 的静态方法;而 thenAccept、thenAsync、 thenApply是CompletableFutre的成员方法。
    • 因为初始的时候没有CompletableFuture对象,也没有参数可传,所以提交的只能是Runnable或者 Supplier,只能是静态方法;
    • 通过静态方法生成CompletableFuture对象之后,便可以链式地提交其他任务了,这个时候就可以 提交Runnable、Consumer、Function,且都是成员方法