异步回调

suaxi
2021-02-19 / 0 评论 / 47 阅读 / 正在检测是否收录...

异步回调

对将来某个事件的结果进行建模

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

评论 (0)

取消