CompletableFuture allOf 和 anyOf
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中进行处理 }