>我有一个要求如下
- 根据特定条件进行数据库调用并获取结果列表
- 对于列表中存在的每条记录,对微服务进行 GET API 调用
- 整合微服务的所有结果并给出响应
我想使第二步平行。现在我根据数据知道列表中将不超过 15 条记录。所以我想为此使用执行器服务。
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
现在我不太有信心是否
- 使用
ExecutorService
是适合我的方案的最佳方法。或者我应该使用其他东西 - 我应该像
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
一样创建一个新的执行程序,还是让容器使用@Autowired
注入托管执行程序
由于您有记录List
,因此您可以使用parallelStream
循环访问它。
List<SomeObject> objectList = resultFromDB();
objectList.parallelStream()
.map(obj -> makeApiCallInParallel(obj))
.collect(Collectors.toList());
parallelStream
将并行执行 API 调用。并行调用的数量受 CPU 线程数的限制。
您可以使用 JVM 属性来增加它:
-Djava.util.concurrent.ForkJoinPool.common.parallelism=20