背景:
CompletableFuture字面翻译过来,就是“可完成的Future”。同传统的Future相比较,CompletableFuture能够主动设置计算的结果值(主动终结计算过程,即completable),从而在某些场景下主动结束阻塞等待。而Future由于不能主动设置计算结果值,一旦调用get()进行阻塞等待,要么当计算结果产生,要么超时,才会返回。
CompletableFuture说白了其实就是为了解决Future的问题(阻塞),而生!!!
下面总结CompletableFuture的常用api
1. 创建CompletableFuture
实例方法:
//实例方法
CompletableFuture<String> completableFutureOne = new CompletableFuture<>();
Supplier<?> task=new Supplier<Object>() {
@Override
public Object get() {
return null;
}
};
CompletableFuture<?> completableFuture = completableFutureOne.supplyAsync(task);
静态方法:
public static void main(String[] args) throws ExecutionException, InterruptedException {
Runnable runnable = () ->
System.out.println("执行无返回结果的异步任务");
System.out.println(CompletableFuture.runAsync(runnable).get());
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
System.out.println("执行有返回值的异步任务");
return "Hello World";
});
String result = future.get();
System.out.println(result);
}
2、whenComplete-第一个任务结束,对其结果处理(handly的作用一样)
结果处理就是当future任务完成时,对任务的结果做处理工作!或异常情况处理!
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
try {
TimeUnit.SECONDS.sleep(1);
} <