如何从Java中的100个线程一次运行10个线程?

时间:2010-11-16 21:08:52

标签: java multithreading

我正在使用Java 6.

假设我创建了100个线程,每个线程完成一个任务。我想连续一次运行10个线程。这意味着如果我正在运行线程1-10,并且线程8结束,我希望能够立即启动线程11,而无需等待1-10加入。

我该怎么做?

解决这个问题的一种方法可能是使用isAlive()方法,但我想知道如果没有轮询我是否可以这样做。

感谢。

3 个答案:

答案 0 :(得分:8)

你为什么需要这样做?

更好的方法是创建一个包含10个线程的池并向其提交100个任务。它将具有完全相同的效果 - 100个任务中的10个同时运行。

ExecutorService pool = Executors.newFixedThreadPool(10);

for (int i = 0; i < 100; i++)
    pool.submit(...);

答案 1 :(得分:2)

使用带有10个线程的ExecutorService线程池来提交任务。你总结的任何工作都将以q Queue结束,10个线程将从中执行你的1000个工作。

答案 2 :(得分:0)

当你说“一次”时,谈论并发性是令人困惑的。如果使用线程池大小为10的ExecuterService,则将启用100个线程中的10个执行。但请记住,如果您只有1个CPU,并且其中一个线程具有更高的优先级,则所有其他线程可能保持等待状态。 我的建议是根据可用的CPU数来调整你的数字线程。