当前位置: 首页 > 知识库问答 >
问题:

在完成之前的任一异步方法后,在Java中执行方法?

何涵忍
2023-03-14

我正在尝试使用Complettable Future异步运行两个任务。该程序异步运行,因此a()和b()以任何顺序同时首先运行。但是c()只能在a()或b()之一完成后运行

class Pair{
  public void pair2() throws InterruptedException, ExecutionException {
    CompletableFuture<Void> fa = CompletableFuture.runAsync(() -> a());
    CompletableFuture<Void> fb = CompletableFuture.runAsync(() -> b());

    if(fa.isDone || fb.isDone){ //should not be if loop.
      c();
    }
    return;
  }

  public void a(){
    System.out.println("I'm a.");
    return;
  }
  public void b(){
    System.out.println("I'm b.");
    return; 
  }

  public void c(){
    System.out.println("I'm c, I cannot be the first!");
    return;
  }
}

我不熟悉CompletableFuture API,有没有办法检查其中一个任务是否完成并调用下一个方法C?

共有1个答案

公西凯捷
2023-03-14

您可以使用< code > xxxone 方法之一。例如:

CompletableFuture<Void> fc = fa.acceptEither(fb, v -> c());

或者您可以使用< code>anyOf方法:

CompletableFuture.anyOf(fa, fb).thenRun(this::c);
 类似资料:
  • 本文向大家介绍C#异步执行任务的方法,包括了C#异步执行任务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#异步执行任务的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 示例: 当我在测试套件中执行这些类时,首先执行类1的@test,然后打开一个新的浏览器实例,其中执行类2的@test。现在执行类1的第二个@test,然后执行类2的第二个@test。注意:在这种情况下测试并行为false。需要知道为什么会这样。我希望第一类的执行在第二类开始之前完成。我想不通。我做了一些变通办法,但没有奏效。 提前道谢。

  • 问题内容: 我正在编写一个swing应用,当执行某些方法时,我希望有“ wait”光标。我们可以这样: 我想要实现的是一个Java批注,该批注将在方法执行之前设置等待游标,并在执行后将其设置回正常状态。所以前面的例子看起来像这样 我怎样才能做到这一点?也欢迎提出有关解决此问题的其他方法的建议。谢谢! PS-我们在项目中使用Google Guice,但我不知道如何使用它来解决问题。如果有人为我提供类

  • 我使用hibernate持久化方法得到了一些奇怪的结果。下面是解释。 1) 用户服务简单 2) 用户道 3) JSMListener 现在,当我传递重复的电子邮件id时,我的userDao方法应该抛出异常,然后我的下一步* * message sender . send user message(queue,user dto);**不应该叫。但当我传递重复的电子邮件id时,UserDaoImpl抛

  • 我有一个测试方法,看起来像: 并行工作使用可关闭的资源来控制生命周期,该资源在方法中关闭: 问题是:方法是在完成工作之前和等待超时到期之前调用的。 怎么可能?那我该怎么解决呢?