根据下面的代码,completedFuture 是否会同时触发两个项目?

is completedFuture according to below code will trigger two items in same time?

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

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

我做的就是这样

@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中运行s的代码是异步执行的,不是之前执行的代码。

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