CompletableFuture<String> future1=CompletableFuture.supplyAsync(()->{
List<String> objects=new ArrayList<>();
String s= objects.get(0);
return "成功";
}).exceptionally(ex->{
//这样的话 future2 就可以正常执行了
return "捕获异常";
});
CompletableFuture<String> future2=CompletableFuture.supplyAsync(()->{
return "成功";
});
// CompletableFuture<Void> futures = CompletableFuture.allOf(future1,future2);
CompletableFuture<Void> futures = CompletableFuture.anyOf(future1,future2);
try{
//如果是allOf,则只有等所有CompletableFuture都完成,才会继续往下走,即执行future1.get()
//如果是anyOf,则只要任何一个CompletableFuture完成,就会继续往下走,即执行future1.get()
//相当于把每个future的结果都放入futures中。而且每个future都是独立的,单个future报错不会影响其他的future的值的获取
//如果单个future异常了,会立马抛出异常,但是不妨碍之后其他正常的future.get()的获取
futures.get(3000,TimeUnit.MILLISECONDS);
// futures.join();//会一直阻塞,直到CompletableFuture都完成或者任何一个CompletableFuture完成
String s1= future1.get();//此处get方法会一直阻塞
String s2= future2.get();//future1 会报错,如果future2在另外一个try catch中,则可以正常获取
} catch(Exception e){
//此处的堆栈会被吞掉,所有异常都需要在各自的future中进行处理
}