2010-11-16 34 views
3

我正在使用Java 6.如何从Java中的100个线程一次运行10个线程?

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

我该怎么做?

解决此问题的一种方法可能是使用isAlive()方法,但我想知道是否可以在不进行轮询的情况下执行此操作。

谢谢。

+0

http://javabeanz.wordpress.com/2010/02/19/threadpoolexecutor-basics/ – h3xStream 2010-11-16 21:14:40

+0

感谢您的链接。 – Russell 2010-11-16 21:22:05

回答

7

为什么你需要这样做?

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

ExecutorService pool = Executors.newFixedThreadPool(10); 

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

不错! ThreadPool就是我一直在寻找的东西。非常感谢。 – Russell 2010-11-16 21:14:03

+0

@cdhowie,谢谢澄清。我误解了这个问题。 – 2010-11-16 21:16:27

1

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

0

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

相关问题