异步回调
对将来某个事件的结果进行建模
package com.sw.future;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/**
* @Author suaxi
* @Date 2021/2/18 23:40
* 异步回调
*/
public class Test01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//没有返回值的 runAsync 异步回调
// CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(() -> {
// try {
// TimeUnit.SECONDS.sleep(2);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println(Thread.currentThread().getName() + " runAsync");
// });
// System.out.println("无返回值的异步回调测试");
// completableFuture.get();
//有返回值的 supplyAsync 异步回调
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + " supplyAsync");
int i = 1/0;
return 200;
});
System.out.println(completableFuture.whenComplete((t, u) -> {
System.out.println("t= " + t); //正常返回的结果
System.out.println("u= " + u); //错误信息:java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
}).exceptionally((e) -> { //链式编程
System.out.println(e.getMessage());
return 404; //错误信息的返回结果
}).get());
}
}
评论 (0)