1 回答
TA贡献1820条经验 获得超10个赞
问题是您在自定义请求被填充之前返回了自定义请求,因为您返回的对象仍在另一个线程中填充。customRequest如果您希望在返回对象之前完全填充该对象,则需要通过调用如下CompletableFuture方法来等待完成:CompletableFuture.get()
public CustomRequest getCustomRequest(Member member,
Address address,Member member){
CustomRequest customRequest = new CustomRequest();
CompletableFuture.runAsync(() -> {
populateAddress(address, customRequest);
populatecontact(contact, customRequest);
populateMemberDetails(member, customRequest);
}).get();//EDIT: added get method here to wait for the execution
return customRequest;
}
但是这种使用CompletableFuture实际上没有多大意义(除了填充是在另一个线程中完成的)。它仍然是一个阻塞调用,您将不得不等待对象被填充。
Future您可以尝试像这样使用 java 8框架:
public CompletableFuture<CustomRequest> getCustomRequest(Member member, Address address, Member member){
return CompletableFuture.supplyAsync(() -> {
CustomRequest customRequest = new CustomRequest();
populateAddress(address, customRequest);
populatecontact(contact, customRequest);
populateMemberDetails(member, customRequest);
return customRequest;
});
}
这样你就可以像这样创建方法调用(只是一个例子):
getCustomRequest(aMember, anAddress, anotherMember).thenAccept(populatedCustomRequest -> populatedCustomRequest.doSomethingUsefull());
使用例如类的方法thenAccept(Consumer)CompletableFuture。doSomethingUsefull()这将导致类的方法在填充后立即CustomRequest在完整的填充对象上执行。CustomRequest
添加回答
举报