2011-06-20 143 views
6

下面的代碼工作正常,但我想知道..概念上,它是正確的嗎?開始線程,等待他們到join。應該用ThreadPool來代替嗎?如何啓動和管理Java線程?

如果可能的話,請評論

List<Thread> threads = new ArrayList<Thread>(); 

for (Test test : testsToBeExecuted) { 
    Thread t = new Thread(test); 
    threads.add(t); 
    t.start(); 
} 

for (Thread thread : threads) { 
    thread.join(); 
} 

回答

9

概念上,它看起來不錯。您可以使用您創建一個像一個ExecutorService:

ExecutorService service = Executors.newFixedThreadPool(testsToBeExecuted.size()); 

Thenyou將在執行服務本身創建可調用的invokeAll和一個列表。這實質上會做同樣的事情。

0

同意ExecutorService是要走的路。我有一個實用程序類,它使用ExecutorService來運行任意數量的任務,收集結果並將它們作爲列表返回。 ExecutorService將爲您完成所有的管家工作。