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