2009-09-29 9 views
6

मैं एक प्रवेश कोड जिसके बाद सभी Threads रों क्रियान्वित कर रहे हैं निष्पादित करने की आवश्यकता है निष्पादित करने के लिए कैसे।कोड का एक टुकड़ा के बाद ही सभी धागे से किया जाता है

Thread t1 = new MyThread(); 
Thread t2 = new MyThread(); 
t1.run(); 
t2.run(); 

doLogging(); 

वहाँ पर अमल करने doLogging() के बाद ही दोनों धागे उनके प्रसंस्करण के साथ किया जाता है कोई तरीका है। अब जब कि doLogging() जैसे ही t1 और t2 शुरू कर रहे हैं कहा जाता है।

+2

ऐसा नहीं है कि जब से तुम शुरू करने के बजाय रन बुला रहे हैं ने बताया जाना चाहिए आप पहले ही वांछित व्यवहार कर रहे हैं। –

उत्तर

19

बस join() अपने doLogging() कॉल करने से पहले सभी थ्रेड:

t1.join(); 
t2.join(); 

// the following line will be executed when both threads are done 
doLogging(); 

ध्यान दें कि join() कॉल के आदेश कोई फर्क नहीं पड़ता अगर आप अपने सूत्र के सभी के लिए इंतजार करना चाहते हैं।

+0

धन्यवाद। यह काम किया :) – shafi

+0

ध्यान दें कि यदि आप जावा 1.5 का उपयोग कर रहे हैं या बाद में नया java.util.concurrent को निम्न-स्तरीय थ्रेड प्रोग्रामिंग (ग्रेगरी मोस्टिज्की के उत्तर देखें) पर प्राथमिकता दी जानी चाहिए। –

+0

@ जिम: जावा 1.5 के साथ या बाद में मैं ऐसी चीज के लिए काउंटरडाउनलैच का उपयोग नहीं करता, बल्कि एक साधारण निष्पादक। –

0

आप देखेंगे कि यह यूआई दोनों धागे पूरा जब तक लटका कारण होगा मन में मुख्य थ्रेड से कोड, भालू चला रहे हैं। यह वांछित प्रभाव नहीं हो सकता है।

बजाय, आप एक निर्माण पर विचार जहां प्रत्येक धागा अपने Logger वस्तु पर सिंक्रनाइज़ करता है और कहा कि निर्माण के भीतर करने के लिए कॉल प्रदर्शन कर सकता है। जब से मैं क्या आप विशेष रूप से पूरा करने के लिए कोशिश कर रहे हैं पता नहीं है, अन्य समाधान क्या Joachim का सुझाव दिया, केवल एक धागे के भीतर है कि कोड को रखने है।

6

में शामिल होने के() समाधान के अलावा वहाँ भी कुछ java.util.concurrent पुस्तकालय में CountDownLatch कहा जाता है। यह आपको इसे किसी निश्चित संख्या में प्रारंभ करने की अनुमति देता है और तब तक प्रतीक्षा करता है जब तक कि यह निर्दिष्ट संख्या को हिट न करे।

सरल उदाहरण:

CountDownLatch latch = new CountDownLatch(NUMBER_OF_THREADS); 
for(int i=0; i<NUMBER_OF_THREADS;i++) 
    new Thread(myCode).start(); 

latch.await(); 

कुंडी स्पष्ट रूप से कार्यकर्ता धागे ने टक्कर मार दी जाना चाहिए हालांकि इस काम करने के लिए:

latch.countDown() 
+0

+1। यह नई सुविधा जावा में अनावश्यक रूप से सबसे कम-स्तरीय थ्रेड प्रोग्रामिंग बनाती है। –

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

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