异步回调

异步回调

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

package com.chao.future;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/**
 * 异步调用:Ajax    CompletableFuture
 * //异步执行
 * //成功回调
 * //失败回调
 */
public class Demo01 {
    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=>Void");
        });
        System.out.println("1111");
        completableFuture.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); // 正常的返回结果
            System.out.println("u=>" + u);// 错误信息:java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
        }).exceptionally((e) -> {
            System.out.println(e.getMessage());
            return 233;  //可以获取到错误的返回结果
        }).get());
/**
 * success Code 200
 * error Code 404 500
 */
    }
}

posted on 2021-05-12 00:14  追梦王子  阅读(111)  评论(0)    收藏  举报