从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,且都是成员方法
