异步回调
Future 设计的初衷: 对将来的某个事件的结果进行建模
/** * 异步调用: CompletableFuture * 异步执行 * 成功回调 * 失败回调 */ public class Test01 { public static void main(String[] args) throws ExecutionException, InterruptedException { /* // 没有返回值的 runAsync 异步回调 CompletableFuturecompletableFuture = CompletableFuture.runAsync(()->{ try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"runAsync=>void"); }); System.out.println("123"); completableFuture.get(); //获取阻塞执行结果 */ // 有返回值的 supplyAsync 异步回调 // 类似于 ajax,成功和失败的回调 // 返回的是错误信息; CompletableFuturecompletableFuture = CompletableFuture.supplyAsync(() -> { System.out.println(Thread.currentThread().getName() + "supplyAsync=>Integer"); int i = 10 / 0; return 1; }); 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) -> { e.getMessage(); return 0; // 可以获取到错误的返回结果 }).get()); } }