14.1、Future
设计初衷:对将来的某个事件的结果进行建模

package com.chen.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 {
// 没有返回值的 runAsync 异步回调
// CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(()->{
// try {
// TimeUnit.SECONDS.sleep(5);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println(Thread.currentThread().getName()+"runAsync=>void");
// });
//
// System.out.println("1111");
//
// completableFuture.get(); // 获取阻塞执行结果
// 有返回值的 supplyAsync 异步回调
// ajax,成功和失败的回调
// 失败返回的是错误信息
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName()+"completableFuture=>Integer");
int i = 10/0;
return 1024;
});
System.out.println(completableFuture.whenComplete((t, u) -> {
System.out.println("t=" + t); // 正常的返回结果
System.out.println("u=" + u); // 错误信息 java.util.concurrent.CompletionException
}).exceptionally((e) -> {
System.out.println(e.getMessage());
return 233; // 可以获取到错误的返回结果
}).get());
}
}
该博客探讨了Java中的Future设计模式,主要通过一个Demo01示例展示了如何使用CompletableFuture进行异步调用,并处理成功和失败的回调。内容包括无返回值的runAsync和有返回值的supplyAsync方法,以及异常处理和结果获取。博客还提到了异步调用在Ajax场景中的应用。
2559

被折叠的 条评论
为什么被折叠?



