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
添加回答
舉報