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中进行处理
  
 }

 

posted @ 2024-05-14 16:04  龙之谷2019  阅读(54)  评论(0编辑  收藏  举报