【发布时间】:2015-06-16 10:47:05
【问题描述】:
我的程序有一个网站数组列表,我通过图像处理进行 I/O,从网站抓取数据并更新/插入数据库。现在它很慢,因为所有的 I/O 都在完成。我想通过允许我的程序使用线程运行来加快速度。列表中没有任何内容被删除,列表中的每个网站都是相互独立的,所以对我来说,让实例同时循环遍历列表似乎可以加快速度。
假设我的列表是 10 个网站,现在它当然会遍历位置 0 到 9,直到我的程序完成对所有网站的处理。
假设我想让 3 个线程同时循环遍历这个包含 10 个网站的列表,同时在各自独立的空间中执行所有 I/O 和数据库更新,但使用相同的列表。
website.get(0) // thread1
website.get(1) // thread2
website.get(2) // thread3
然后说如果thread2到达循环的末尾,它首先返回并在下一个位置工作
website.get(3) // thread2
然后thread3完成,获取下一个位置
website.get(4) // thread3
然后thread1最终完成并在下一个位置工作
website.get(5) // thread1
等,直到完成。这很容易设置吗?在某个地方我可以找到一个很好的例子吗?我在网上寻找其他地方谈论我的场景,但没有找到。
【问题讨论】:
-
使用大小为 3 的固定线程池。但您知道,线程可能不会改变您的总处理速度。
-
如果使用多线程,总处理速度会显着更快,尤其是在涉及网络的情况下。想象一下,如果您的网络浏览器必须一个接一个地下载每一个图像 - 加载一个页面需要很长时间。
标签: java multithreading arraylist