2011-09-10 16 views
6

मुख्य विधि में जावा 1.5 निष्पादक सेवा तंत्र का उपयोग करके एक बाल धागा शुरू हो जाता है। जब तक बच्चा धागा पूरा नहीं हो जाता तब तक मैं मुख्य थ्रेड कैसे इंतजार कर सकता हूं?निष्पादक सेवा का उपयोग शुरू करने वाले थ्रेड में कैसे शामिल होना है?

public class MainClass { 

    public static void main(String[] args) { 
     ExecutorService executorService=null; 
     try { 
      executorService=Executors.newFixedThreadPool(1); 
      executorService.execute(new TestThread()); 
      System.out.println("Main program exited..."); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      executorService.shutdown(); 
     } 
    } 
} 

public class TestThread extends Thread { 

    public TestThread() { 
    } 

    public void run() { 
     try { 
      for (int i=0;i<10;i++) { 
       System.out.println(i); 
       TimeUnit.SECONDS.sleep(5); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

कृपया का उपयोग नहीं करते जावा पर सी शैली मांगपत्र - बस कोड अब –

उत्तर

9

अंगूठे के नियम के रूप में, आपको सीधे थ्रेड का विस्तार नहीं करना चाहिए क्योंकि यह यहां भ्रम की ओर जाता है, जैसा कि यहां है।

आपका टेस्ट थ्रेड कभी शुरू नहीं हुआ है ताकि आप इसके साथ शामिल नहीं हो सकें। यह सब एक रननेबल के रूप में कार्य कर रहा है (जो आपको इसके बजाय उपयोग करना चाहिए)।

यदि आप कार्य पूरा करने के लिए प्रतीक्षा करना चाहते हैं।

Future future = executorService.submit(new TestRunnable()); 

// wait for the task to complete. 
future.get(); 

Btw: जावा 1.4.2 के बाद जावा 5.0 आया जावा 6 और जावा 7. के बाद

+0

... तो जावा 8 बनाता है। :) – Campa

+1

पीएस माइंड भी [कॉल करने योग्य] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html) इंटरफ़ेस यदि आप द्वारा दिए गए मान में रुचि रखते हैं एक कार्य। – Campa

+0

@ कम्पा और जावा 9 ईए। सार्वजनिक अपडेट का जावा 8 अंत मार्च 2017 है। –

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