Java8中提供了CompletableFeature工具,提供了一系列基于函数式的api。本篇主要介绍这些api的使用以及源码实现。
CompletableFeature.supplyAsyc()
1 | //1.输入一个supplier函数,输出一个CompletableFeature<U>引用 |
主线程循环等待 volatile object result返回CompletableFeature.get()。同时可以设置超时时间。
1 | private Object waitingGet(boolean interruptible) { |
附上流程图吧:
推荐设置超时时间:
1 | import java.util.concurrent.CompletableFuture; |
CompletableFeature.runAsync()
1 | CompletableFuture.runAsync(() -> |
异步调用线程,不关心返回结果,这里入参是一个lamada表达式。Java8之前的写法是匿名内部类的方式:
1 | CompletableFuture.runAsync( |
这个函数调用不关心返回结果。
CompletableFeature.runAsync().whenComplete()/.whenCompleteAsync
- 1.CompletableFeature.runAsync()开辟一个异步线程a,主线程直接返回CompletableFeature
类型的一个引用,不关心a的执行结果。 - 2.主线程用CompletableFeature
的引用调用.whenComplete()直接返回CompletableFeature 的引用,a线程执行完成之后,执行whenComplete()中的BiConsumer方法,完全异步,不干扰主线程。
1 | import java.util.concurrent.CompletableFuture; |
1 | 10 CompleteFeature runAsync... |