【发布时间】:2015-05-05 13:22:45
【问题描述】:
我需要迭代一个大的 ArrayList(约 50,000 个条目),并且我需要使用多个线程来相当快地完成这项工作。
但是我需要每个线程都从一个唯一的索引开始,这样就不会有两个线程遍历列表的同一部分。将有一个batchSize 和100,因此每个线程将从其startIndex 循环到startIndex + 100。
有什么方法可以实现吗?请注意,我在这里只执行读取操作,没有写入。列表中的每个条目只是一个字符串,它实际上是一个 SQL 查询,然后我通过 JDBC 对数据库执行该查询。
【问题讨论】:
-
你使用什么类型的收藏?
-
可以用java 8
.stream().parallel()吗? -
您可以先拆分它们并将子列表传递给执行数据库调用的workerThreads
-
来自上一个答案“再考虑一下,也许您可以使用 ForkJoinPool 并分叉多个线程,每个线程都经过一批 100 并加入线程的结果。” FWIW :)
标签: java multithreading collections iteration