我需要处理80个信息文件,我是通过8个线程的组来完成的,我想做的是总是运行8个线程(现在我有8个线程,然后是8个线程)完成他们的工作,产生另外8个,等等。
所以我想知道是否有办法解决这个问题:
答案 0 :(得分:5)
为什么不使用thread pool,尤其是fixed size thread pool?将线程池大小配置为8个线程,然后将所有工作项提交为Runnable
/ Callable
个对象。线程池将使用8个配置的线程执行这些。
答案 1 :(得分:3)
因此,每个人都快速进入并告诉您使用thread pool。当然,这是achieve你想要的正确方法。问题是,这是正确的想要吗?它并不像在问题中抛出一堆线程那么简单,而且神奇地解决了所有问题。
您尚未告诉我们处理的性质。作业I / O是绑定的,还是CPU绑定 1 ?如果它们受CPU限制,则为threads do nothing。如果它们是I / O绑定的,则线程可能帮助。
您还没有告诉我们您是否有八个核心(或计算单位)。如果你不能保证你会拥有它,那么运行八个线程可能不是最好的。
有很多值得思考的问题。您正在增加解决方案的复杂性。也许它会让你得到你想要的东西,也许不是。
1 :是的,你说你正在处理文件,但这并没有告诉我们。也许处理是密集的(想想:渲染视频文件)。或许你正在从一个非常快的磁盘上读取文件(想想:SSD或内存映射文件)。