gpt4 book ai didi

java - is CompletedFuture 根据下面的代码会同时触发两个项目吗?

转载 作者:行者123 更新时间:2023-11-30 01:50:46 31 4
gpt4 key购买 nike

我需要同时异步运行两个项目根据下面的场景,如果这两个项目同时或顺序触发,我感到有点困惑,我的意思是在每个用户完成后,然后触发下一个项目,或者后台实际发生了什么?

调用者方法应该接受两个项目的列表

我所做的就是这样

@Async
public CompletableFuture<User> runTwoInSameTime(String userName) {
User user = getUserDetails(userName);
return CompletableFuture.completedFuture(user );
}

public void caller(List<User> users){
List<CompletableFuture<User>> completableFutures = v.stream().map((user) -> {
return runTwoInSameTime(user.getName);
}).collect(Collectors.toList());
}

如果它是连续的,那么这个更改是否可以使它们同时触发?

@Async
public CompletableFuture<User> runTwoInSameTime(String userName) {
User user = getUserDetails(userName);
return CompletableFuture.supplyAsync(() -> user);
}

并将流更改为parallelStream() ?

最佳答案

我想你想要 getUserDetails()异步运行的方法。当您当前调用它时,它正在调用者的线程中运行。

您当前的代码和修复程序都遇到了同样的问题。将其更改为此将异步运行该方法:

public CompletableFuture<User> runTwoInSameTime(String userName) {
return CompletableFuture.supplyAsync(() -> getUserDetails(userName));
}

CompletableFuture.supplyAsync 中运行的代码异步执行,而不是之前执行的代码。

附注:当您收集 List<CompletableFuture<User>> 时对象,您应该知道这是代表潜在运行(未完成)任务的 future 列表。您可能需要浏览该列表并调用 join()收集后的每个元素。确保您的getUserDetails每次调用方法都已完成。

关于java - is CompletedFuture 根据下面的代码会同时触发两个项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56134073/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com