2010-11-16 288 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數量調整您的號碼線程。

相關問題