【发布时间】:2017-09-25 03:07:05
【问题描述】:
我对 java 很陌生,我想使用执行器服务或使用 java 中的任何其他方法并行化嵌套的 for 循环。我想创建一些固定数量的线程,这样 CPU 就不会完全被线程占用。
for(SellerNames sellerNames : sellerDataList) {
for(String selleName : sellerNames) {
//getSellerAddress(sellerName)
//parallize this task
}
}
sellerDataList 的大小 = 1000,sellerNames 的大小 = 5000。
现在我想创建 10 个线程,并为每个线程平均分配相等的任务块。那是针对第 i 个 SellerDataList,第一个线程应该获取 500 个名称的地址,第二个线程应该获取下一个 500 个名称的地址,依此类推。
完成这项工作的最佳方法是什么?
【问题讨论】:
-
您可以使用 FixedSizeThreadPool 并为每个卖家名称提交一个任务。请参阅docs.oracle.com/javase/8/docs/api/java/util/concurrent/… 当您提交所有任务时,在 Executor 上发出 shutdown ,然后等待它完成 awaitTermination
-
也许
Collections.stream().parallel()表单是一个选项? -
我已经尝试过 Collections .stream().parallel()。它受核心数量的限制。
-
语法错误。你写
foreach的地方应该是for。 -
@Jhutan Debnath,“受 [the] 核心数量的限制”实际上并没有太大的限制。 “parallize”应拼写为“parallelize”。
标签: java multithreading parallel-processing threadpool