CompletableFuture的exceptionally

简介: CompletableFuture的exceptionally代码:private void test() { System.

CompletableFuture的exceptionally


代码:

private void test() {
    System.out.println("开始...");

    CompletableFuture.supplyAsync(new Supplier<String>() {
        @Override
        public String get() {
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 此处故意抛出一个空指针异常。
            // 导致代码处理逻辑转入到exceptionally(new Function<Throwable, String>()
            if (true) {
                throw new NullPointerException();
            }

            System.out.println("返回 zhang");
            return "zhang";
        }
    }).exceptionally(new Function<Throwable, String>() {
        @Override
        public String apply(Throwable throwable) {
            System.out.println("exceptionally - apply " + throwable.toString());
            return "发生异常!";
        }
    }).whenCompleteAsync(new BiConsumer<String, Throwable>() {
        @Override
        public void accept(String s, Throwable throwable) {
            System.out.println("accept : " + s);
        }
    });

    System.out.println("运行至此.");
}


运行输出:

07-12 10:32:26.797 17266-17266/? I/System.out: 开始...
07-12 10:32:26.801 17266-17266/? I/System.out: 运行至此.
07-12 10:32:29.803 17266-17318/zhangphil.test I/System.out: exceptionally - apply :java.util.concurrent.CompletionException: java.lang.NullPointerException
07-12 10:32:29.805 17266-17318/zhangphil.test I/System.out: accept : 发生异常!

相关文章
|
6月前
|
Java
异步技巧之CompletableFuture
异步技巧之CompletableFuture
73 2
|
4月前
|
缓存 Java Maven
CompletableFuture
【7月更文挑战第29天】
45 4
|
4月前
|
Java 开发者 Spring
CompletableFuture 使用总结
CompletableFuture 使用总结
113 1
|
3月前
CompletableFuture 打桌球的应用
CompletableFuture 打桌球的应用
17 0
|
3月前
|
Java 测试技术
CompletableFuture 使用
CompletableFuture 使用
41 0
|
6月前
|
Java API
java多线程之FutureTask、Future、CompletableFuture
java多线程之FutureTask、Future、CompletableFuture
252 0
|
Java
CompletableFuture总结和实践
CompletableFuture被设计在Java中进行异步编程。异步编程意味着在主线程之外创建一个独立的线程,与主线程分隔开,并在上面运行一个非阻塞的任务,然后通知主线程进展,成功或者失败。
345 0
|
消息中间件 Java 中间件
Future and CompletableFuture
Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里, 我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存了执行的结果 ,可通过Future的get()方法取出结果,如果线程池使用的是execute(),则传入的是Runnable接口 无返回值。
71 0
|
Java 调度
并发编程——Future & CompletableFuture
Java创建线程的方式,一般常用的是Thread,Runnable。如果需要当前处理的任务有返回结果的话,需要使用Callable。Callable运行需要配合Future。
56 0