> Future设计的初衷:对将来的某个时间的结果进行建模
package com.qiu.future;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
* 异步调用:Ajax
* 成功回调
* 失败回调
*
*/
public class Demo01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//发起一个请求
/*
//此代码为没有返回值的异步回调
Future<Void> future =CompletableFuture.runAsync(()->{
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"runAsync->Void");
});
System.out.println("11111111111111111111111111111111111111");
future.get();//阻塞获取执行结果
*/
//有返回值的异步回调supplyAsync
//ajax 成功和失败的回调
//返回的是错误信息
CompletableFuture<Integer> completableFuture =CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread().getName()+"supplyAsync->Integer");
int i =10/0;
return 1024;
});
System.out.println(completableFuture.whenComplete((t, u) -> {
System.out.println("t->" + t);//正常的返回结果,如果有异常的话t没有结果
System.out.println("u->" + u);//没有异常的时候,u为null,有异常的时候u会打印错误信息
}).exceptionally((e) -> {
System.out.println(e.getMessage());
return 233;//可以获取的错误的返回结果
}).get());
}
}
异步回调和ajax类似,正常往下执行的时候,可以派出一个任务去异步执行,正常的多线程没有返回值,使用异步回调可以自定义设置返回值,通过.get()方法将值取回来
笔记自己看视频做的,视频链接如下:
B站地址:https://space.bilibili.com/95256449