并行任务方法
thenCombine & thenCombineAsync
thenCombine
:并行执行任务,从 commonPool 线程池中获取线程,并行执行两个任务,等到两个任务都执行结束后,执行一个新的任务方法,将之前两个任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,将返回指定类型结果。thenCombineAsync
:并行执行任务,从 commonPool 线程池中获取线程,并行执行两个任务,等到两个任务都执行结束后,继续从 commonPool 线程池中获取一个子线程,执行一个新的任务方法,将之前两个任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,将返回指定类型结果。
如果上一个阶段执为异常完成,则不会执行组合的下一个阶段,直接抛出异常信息。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}).thenCombine(CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}), (result1, result2) -> {
System.out.println("执行异步任务1和异步任务2完成后的回调");
return result1 + result2;
});
thenAcceptBoth & thenAcceptBothAsync
thenAcceptBoth
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到两个任务都执行结束后,执行一个新的任务方法,将之前两个任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,没有返回值。thenAcceptBothAsync
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到两个任务都执行结束后,继续从 commonPool 线程池中获取一个子线程,执行一个新的任务方法,将之前两个任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,没有返回值。
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}).thenAcceptBoth(CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}), (result1, result2) -> {
System.out.println("执行异步任务1和异步任务2完成后的回调");
});
runAfterBoth和runAfterBothAsync
runAfterBoth
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到两个任务都执行结束后,执行一个新的任务方法,没有返回值。runAfterBothAsync
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到两个任务都执行结束后,继续从 commonPool 线程池中获取一个子线程,执行一个新的任务方法,没有返回值。
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}).runAfterBoth(CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}), () -> {
System.out.println("执行异步任务1和异步任务2完成后的回调");
});
applyToEither和applyToEitherAsync
applyToEither
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到其中一个任务执行结束后,执行一个新的任务方法,将第一个执行结束的任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,将返回指定类型结果。applyToEitherAsync
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到其中一个任务执行结束后,继续从 commonPool 线程池中获取一个子线程,执行一个新的任务方法,将第一个执行结束的任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,将返回指定类型结果。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}).applyToEither(CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}), result -> {
System.out.println("执行异步任务1和异步任务2中的一个完成后的回调");
return result;
});
runAfterEither和runAfterEitherAsync
runAfterEither:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到其中一个任务执行结束后,执行一个新的任务方法,没有返回值。
runAfterEitherAsync:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到其中一个任务执行结束后,继续从 commonPool 线程池中获取一个子线程,执行一个新的任务方法,没有返回值。
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
System.out.println("执行异步任务1");
}).runAfterEither(CompletableFuture.runAsync(() -> {
System.out.println("执行异步任务2");
}), () -> {
System.out.println("执行异步任务1和异步任务2中的一个完成后的回调");
});
acceptEither和acceptEitherAsync
acceptEither
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到其中一个任务执行结束后,执行一个新的任务方法,将第一个执行结束的任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,没有返回值。acceptEitherAsync
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行两个任务,等到其中一个任务执行结束后,继续从 commonPool 线程池中获取一个子线程,执行一个新的任务方法,将第一个执行结束的任务的执行【结果】作为新任务方法的【参数】,然后返回并执行新任务。新任务执行结束后,没有返回值。
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}).acceptEither(CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}), result -> {
System.out.println("执行异步任务1和异步任务2中的一个完成后的回调");
});
allOf
allOf
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行多个任务,等待所有任务都执行结束,没有返回值。
CompletableFuture<Void> future = CompletableFuture.allOf(
CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}),
CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}),
CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务3");
return "执行异步任务3";
})
);
anyOf
anyOf
:并行执行任务,从公共的 commonPool 线程池中获取线程,并行执行多个任务,等到其中任意一个任务执行结束后,返回第一个先执行完成任务的返回值。
CompletableFuture<Object> future = CompletableFuture.anyOf(
CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务1");
return "执行异步任务1";
}),
CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务2");
return "执行异步任务2";
}),
CompletableFuture.supplyAsync(() -> {
System.out.println("执行异步任务3");
return "执行异步任务3";
})
);
最后更新于
这有帮助吗?