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 : 发生异常!

相关文章
|
Dart
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
函数(Function)也被称为方法(Method)。其最直观的理解就是数据中的函数,比如y=f(x),在编程中,f对输入x进行处理,返回结果y,就是一个函数......
1744 0
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
|
easyexcel
easyExcel自定定义类型转换
easyExcel自定定义类型转换
1277 0
|
编解码 算法 固态存储
SSD ECC纠错“天网”之LDPC码
在之前的文章中有提到过,SSD FTL层有一个很重要的功能就是ECC纠错(ECC, Error Correction Code)。
|
存储 缓存 NoSQL
希音面试:亿级用户 日活 月活,如何统计?(史上最强 HyperLogLog 解读)
本文详细介绍了如何使用Redis的各种数据结构(如Set、Bitmap、HyperLogLog)来统计网站的日活(DAU)和月活(MAU)用户数。作者通过实际案例和代码示例,系统地讲解了这些数据结构的原理和应用场景,特别是HyperLogLog在处理亿级用户数据时的优势。文章还深入解析了HyperLogLog的数学原理和底层数据结构,帮助读者更好地理解和应用这一高效的数据统计工具。此外,文章还提供了多个相关面试题和参考资料,适合准备面试的技术人员阅读。
|
存储 消息中间件 NoSQL
Redisson源码(二)延迟队列RDelayedQueue的使用及原理分析
Redisson源码(二)延迟队列RDelayedQueue的使用及原理分析
3042 3
Redisson源码(二)延迟队列RDelayedQueue的使用及原理分析
|
设计模式 算法 开发者
深入理解工厂模式与策略模式:设计模式的灵活应用
深入理解工厂模式与策略模式:设计模式的灵活应用
|
测试技术 调度 Android开发
Flutter系列:关于ensureInitialized()
Flutter系列:关于ensureInitialized()
655 5
|
Swift iOS开发 开发者
【Swift开发专栏】Swift中的代码调试与错误追踪
【4月更文挑战第30天】本文详述了Swift编程中的调试与错误追踪方法。首先,通过Xcode进行代码调试,包括设置断点、查看和修改变量值、分析调用栈,以及在模拟器和真机上调试。其次,介绍了LLDB调试器,及其常用命令、条件断点和异常断点的使用。此外,文章还讨论了错误追踪,如Swift的错误处理机制,以及日志输出和自定义日志级别在问题排查中的重要性。掌握这些技巧能帮助开发者提升问题解决效率和应用质量。
527 0
|
算法 Linux Shell
【linux进程(二)】如何创建子进程?--fork函数深度剖析
【linux进程(二)】如何创建子进程?--fork函数深度剖析
Java 8 的异步利器:CompletableFuture源码解析(建议精读)
实现了俩接口,本身是个class。这个是Future的实现类,使用 completionStage 接口去支持完成时触发的函数和操作。

热门文章

最新文章