我有四个服务。
One will give hotels which is matching to the query.
One will give City which is matching to the query.
One will give Airports which is matching to the query.
One will give Metro stations which is matching to the query.
对于每个HTTP请求,我将点击这四个服务,并合并四个服务的响应并返回。
所以我的示例代码就像
for(EntityGroups entityGroups: EntityGroups.values()){
Callable<Response> callable = new XCallable(entityTypetoFetch, searchQuery);
Future<List<Entity>> listFuture = executor.submit(callable);
entityTypeAndFutureMap.put(entityTypetoFetch, listFuture);
}
此后,我在for循环中得到所有响应
trainStationList = entityTypeAndFutureMap.get(EntityGroups.TRAIN_STATION).get();
landmarkEntities = entityTypeAndFutureMap.get(EntityGroups.LANDMARK_GROUP).get();
cityEntities = entityTypeAndFutureMap.get(EntityGroups.CITY_GROUP).get();
hotelEntities = entityTypeAndFutureMap.get(EntityGroups.HOTEL_GROUP).get();
因为我希望所有列表合并并做出最终响应。我正在打电话。我只想合并这些列表并返回。 如果我在这里使用completablefuture,对您有帮助吗?
截至目前,随着TPS的增加,我的CPU使用率非常高。 越来越多的机器在帮助,但是仍然有任何优化的方法来解决这个问题?
答案 0 :(得分:2)
CompletableFuture
具有一些常规Future
不具备的功能,例如能够将执行功能与thenApply
或thenAccept
链接起来的功能与comlete()
或CompletableFuture
进行链接。可用后的结果。您还可以通过调用get()
的{{1}}方法来从另一个线程完成CompleteableFuture。
因此,根据您的情况,这取决于您要对结果执行什么操作。如果需要进一步的程序流程中的结果,则必须像使用CompletableFuture
方法一样等待它。由于期货将在创建后立即执行,因此它们将在工作线程上并行运行,并且依次等待它们并不意味着它们将按顺序运行。
但是,如果您不需要结果进行进一步处理(例如,您只想将结果插入数据库中),则completableFuture.thenAccept(result -> DB::storeInDB);
的优点是您可以提供接受结果并执行有东西。例如。像这样的get()
这样,您不必等待import { NavigationEvents } from 'react-navigation';
的结果。