2011-06-20 17 views
6

Poniższy kod działa, dobrze, ale zastanawiam się ... koncepcyjnie, czy to prawda? Rozpocznij wątki, poczekaj na nich do join. Czy zamiast tego należy użyć ThreadPool?Jak rozpocząć i zarządzać wątkami Java?

Jeśli to możliwe, prosimy o komentarz

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(); 
} 

Odpowiedz

9

Konceptualnie wygląda dobrze. Można użyć ExecutorService które je utworzyć takich jak:

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

Thenyou byłoby utworzyć listę Callables i invokeAll na samą usługę executora. To w istocie zrobi to samo.

0

Zgadzam się, że ExecutorService jest drogą do zrobienia. Mam klasę narzędziową, która używa ExecutorService do uruchamiania dowolnej liczby zadań, zbierania wyników i zwracania ich jako listy. ExecutorService wykona dla ciebie całą obsługę.

Powiązane problemy