首页 > 其他分享 >CompletableFuture allOf 和 anyOf

CompletableFuture allOf 和 anyOf

时间:2024-05-14 16:10:27浏览次数:23  
标签:futures get future1 future2 allOf future CompletableFuture 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中进行处理
  
 }

 

标签:futures,get,future1,future2,allOf,future,CompletableFuture,anyOf
From: https://www.cnblogs.com/zt1991jskj/p/18179136

相关文章

  • CompletableFuture学习
    CompleteFuture学习packagecom.example.CompleteFutureTest;importjava.util.concurrent.CompletableFuture;importjava.util.concurrent.ExecutionException;/***completeFuture用法*/publicclassTest{publicstaticvoidmain(String[]args)throwsI......
  • CompletableFuture学习总结
    CompletableFuture简介在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合CompletableFuture的方法。Java中的异步计算异步计算很难推理。通常,我们......
  • springboot~CompletableFuture并行计算
    在Spring中,CompletableFuture通常用于异步编程,可以方便地处理异步任务的执行和结果处理,CompletableFuture是Java8引入的一个类,用于支持异步编程和并发操作。它基于Future和CompletionStage接口,提供了丰富的方法来处理异步任务的执行和结果处理。下面是CompletableFuture......
  • CompletableFuture 使用详解
    1.runAsync、supplyAsync:用于异步执行任务。//runAsync:没有返回值CompletableFuture<Void>future1=CompletableFuture.runAsync(()->{System.out.println("Hello");},executor);//supplyAsync:有返回值CompletableFuture<String>future2=Compl......
  • CompletableFuture 异步编排的简单使用
    目录1、创建异步对象2、计算完成时回调方法3、handle方法4、线程串行化方法5、两任务组合-都要完成6、两任务组合-一个完成7、多任务组合如果在我们的业务中某些功能需要其他一些功能执行完成之后才能开始执行(比如获取其他功能的返回结果),这样就需要用到异步编排......
  • CompletableFuture概述、创建方式、常用API、电商比价需求
    ①.CompletableFuture概述②.CompletableFuture创建方式③.CompletableFutureAPI①.获得结果和触发计算(get、getNow、join、complete)②.对计算结果进行处理(thenApply、handle)③.对计算结果进行消费(thenRun、thenAccept、thenApply)④.对计算速度进行选用(appl......
  • 多线程系列(二十) -CompletableFuture使用详解
    一、摘要在上篇文章中,我们介绍了Future相关的用法,使用它可以获取异步任务执行的返回值。我们再次回顾一下Future相关的用法。publicclassFutureTest{publicstaticvoidmain(String[]args)throwsException{longstartTime=System.currentTimeMillis()......
  • Java.CompletableFuture使用
    使用CompletableFuture替代Thread+Runnable解决Thread+Runnable没有返回值、串行化和组合任务问题1、CompletableFuture.runAsync异步没有返回值需要传入一个线程池publicstaticExecutorServiceexecutor=Executors.newFixedThreadPool(10);CompletableFuture.runAsync((......
  • CompletableFuture Demo
    CompletableFutureDemo题目:有一个数据库client,从数据库中取数据A和数据B,然后求和。请使用并发的知识,尽快的完成操作。/***{@code@author:}keboom*{@code@date:}2024/3/8*{@code@description:}*/publicclassDataBaseClient{@SneakyThrowspublic......
  • CompletableFuture使用说明
    前言创建线程的方式只有两种:继承Thread或者实现Runnable接口。但是这两种方法都存在一个缺陷,没有返回值Java1.5以后,可以通过向线程池提交一个Callable来获取一个包含返回值的Future对象Future接口的局限性当Future的线程进行了一个非常耗时的操作,那我们的主线程也就阻塞了......