在前面的异步方法完成后在Java中执行方法?

在前面的异步方法完成后在Java中执行方法?,java,completable-future,Java,Completable Future,我正在尝试使用Completetable future以异步方式运行两个任务。该程序异步运行,因此a()和b()以任意顺序首先并发运行。但是c()只能在a()或b()中的一个完成后运行 class Pair{ public void pair2() throws InterruptedException, ExecutionException { CompletableFuture<Void> fa = CompletableFuture.runAsync(() ->

我正在尝试使用Completetable 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;
  }
}
类对{
public void pair2()引发InterruptedException,ExecutionException{
CompletableFuture fa=CompletableFuture.runAsync(()->a());
CompletableFuture fb=CompletableFuture.runAsync(()->b());
if(fa.isDone | | fb.isDone){//不应是if循环。
c();
}
返回;
}
公共图书馆a(){
System.out.println(“我是a.”);
返回;
}
公共空间b(){
System.out.println(“我是b.”);
返回;
}
公共图书馆c({
System.out.println(“我是c,我不能是第一个!”);
返回;
}
}

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

您可以使用
xxxEither
方法之一。例如:

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

您可以使用
xxxEither
方法之一。例如:

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

if(fa.isDone())
有效吗?不幸的是没有。
if(fa.isDone())
有效吗?不幸的是没有。这有效!是isDone不这么做的原因吗?如果使用isDone是错误的?@Carrein
isDone
会立即返回-因此在您的示例中,很可能任务尚未完成,返回false。这很有效!是isDone不这么做的原因吗?如果使用isDone是错误的?@Carrein
isDone
会立即返回-因此在您的示例中,任务可能尚未完成,并且返回false。