我在多线程方面的经验有限,所以老实说这可能是个糟糕的主意。这是我想要做的:
包含 50 个 URL 的数组列表(示例) 使用 x 数量的线程(例如 5 个)来访问列表中的一系列 URL 调用通用方法来处理 URL(检索 html) 将结果与其他线程结果一起存储在主列表中
现在我坚持用多线程处理ArrayList,我目前的想法是将列表除以列表中有多少个URL,并为每个线程分配一个数字范围来处理例如
线程 1 - 0-7 线程 2 - 8-15
等等
我假设这是一个糟糕的方法,但我真的找不到示例方法。
非常感谢帮助/建议。
最佳答案
- 创建一个线程池,其中每个线程处理一个 URL 列表中的时间。
- 保留一个全局索引计数器,以便在 线程完成后,它可以从列表中检索下一个 URL 以进行处理。
- 这样做直到所有 URL 都被处理,即。 index == list.size()
这样所有线程都得到充分利用,直到作业完成。您可以调整池中的线程数,以针对您的特定运行时环境优化性能。
只需确保您的索引计数器代码是线程安全的。 :)
关于java - 多线程通过列表正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446816/