在前面的异步方法完成后在Java中执行方法?
我正在尝试使用Completetable future以异步方式运行两个任务。该程序异步运行,因此a()和b()以任意顺序首先并发运行。但是c()只能在a()或b()中的一个完成后运行在前面的异步方法完成后在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(() ->
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是错误的?@CarreinisDone
会立即返回-因此在您的示例中,很可能任务尚未完成,返回false。这很有效!是isDone不这么做的原因吗?如果使用isDone是错误的?@CarreinisDone
会立即返回-因此在您的示例中,任务可能尚未完成,并且返回false。