根据下面的代码,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
方法已完成每次调用。
我需要 运行 两个项目同时异步 根据以下情况,如果同时或按顺序触发这两个项目,我会感到有点困惑,我的意思是在每个用户完成后触发下一个,或者在后台实际发生了什么?
调用方方法应该接受两个项目的列表
我做的就是这样
@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
方法已完成每次调用。