2011-06-20 14 views
6

निम्नलिखित कोड काम करता है, ठीक है, लेकिन मुझे आश्चर्य है .. अवधारणात्मक रूप से, क्या यह सही है? धागे शुरू करें, उनके लिए join पर प्रतीक्षा करें। ThreadPool इसके बजाय इस्तेमाल किया जाना चाहिए?जावा थ्रेड कैसे शुरू करें और प्रबंधित करें?

संभव हो तो, टिप्पणी कृपया

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 निष्पादक सेवा पर ही callables और invokeAll की एक सूची बना होगा। संक्षेप में यह वही काम करेगा।

0

सहमत हैं कि निष्पादक सेवा जाने का तरीका है। मेरे पास एक उपयोगिता वर्ग है जो निष्पादक सेवा का उपयोग मनमानी संख्याओं को चलाने के लिए करता है, परिणाम एकत्रित करता है और उन्हें एक सूची के रूप में वापस कर देता है। निष्पादक सेवा आपके लिए सभी हाउसकीपिंग करेगी।

संबंधित मुद्दे