2

我需要处理 80 个信息文件,并且我通过 8 个线程组进行处理,我想做的是始终运行 8 个线程(现在我有 8 个线程,并且在这 8 个线程完成他们的工作之后,生成另外 8 个,依此类推)。

所以我想知道是否有办法做他的:

  • 启动 8 个线程。
  • 在 1 个线程完成其工作后,启动另一个线程(所以我一直在运行 8 个线程,直到工作完成)
4

2 回答 2

5

为什么不使用线程池,尤其是固定大小的线程池?将您的线程池大小配置为 8 个线程,然后将您的所有工作项作为Runnable/Callable对象提交。线程池将使用 8 个配置的线程执行这些操作。

于 2013-07-09T22:53:22.230 回答
3

所以,每个人都很快跳进去告诉你使用线程池。当然,这是实现您想要的正确方法。问题是,想要的东西是正确的吗?这不是在问题上扔一堆线程那么简单,神奇地一切都解决了。

你还没有告诉我们处理的性质。作业是 I/O 绑定还是 CPU 绑定1?如果它们受 CPU 限制,则线程什么也不做。如果它们受 I/O 限制,线程可能会有所帮助。

您还没有告诉我们您是否有八个内核(或计算单元)。如果你不能保证你会拥有它,那么运行八个线程可能不是最好的。

有很多事情要考虑。您正在增加解决方案的复杂性。也许它能让你得到你想要的,也许不是。

1:是的,你说你正在处理文件,但这并没有告诉我们足够的信息。也许处理很密集(想想:渲染视频文件)。或者,也许您正在从一个非常快的磁盘读取文件(想想:SSD 或内存映射文件)。

于 2013-07-09T23:03:31.593 回答