2011-06-20 18 views
6

Aşağıdaki kod çalışır, güzel, ama merak ediyorum .. kavramsal olarak doğru mu? Konuları başlatın, join için bekleyin. Bunun yerine ThreadPool kullanılmalı mı?Java iş parçacığı nasıl başlatılır ve yönetilir?

Mümkünse

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

cevap

9

Kavramsal olarak gayet iyi görünüyor yorum lütfen.

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

Sonra sen infaz hizmet kendisinde callables ve invokeAll listesini oluşturmak olacaktır: Eğer gibi bir tane oluşturmak bir ExecutorService kullanabilirsiniz. Bu özünde aynı şeyi yapacak.

0

ExecutorService'ın gitmenin yolu olduğunu kabul edin. Ben rasgele sayıda görevleri çalıştırmak, sonuçları toplamak ve bunları bir liste olarak döndürmek için ExecutorService kullanan bir yardımcı program sınıfım var. ExecutorService tüm temizlik işlerini sizin için yapacak.

İlgili konular