1 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
問(wèn)題是您在自定義請(qǐng)求被填充之前返回了自定義請(qǐng)求,因?yàn)槟祷氐膶?duì)象仍在另一個(gè)線程中填充。customRequest如果您希望在返回對(duì)象之前完全填充該對(duì)象,則需要通過(guò)調(diào)用如下CompletableFuture方法來(lái)等待完成: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實(shí)際上沒(méi)有多大意義(除了填充是在另一個(gè)線程中完成的)。它仍然是一個(gè)阻塞調(diào)用,您將不得不等待對(duì)象被填充。
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;
});
}
這樣你就可以像這樣創(chuàng)建方法調(diào)用(只是一個(gè)例子):
getCustomRequest(aMember, anAddress, anotherMember).thenAccept(populatedCustomRequest -> populatedCustomRequest.doSomethingUsefull());
使用例如類的方法thenAccept(Consumer)CompletableFuture。doSomethingUsefull()這將導(dǎo)致類的方法在填充后立即CustomRequest在完整的填充對(duì)象上執(zhí)行。CustomRequest
添加回答
舉報(bào)