2010-08-21 3 views
9

जब मेरा एप्लिकेशन किसी विंडो को बंद करके या System.exit() विधि का आविष्कार करके बाहर निकलने के लिए तैयार होता है। क्या मुझे मैन्युअल रूप से बनाए गए थ्रेड को रोकना है या जावा मेरे लिए इसका ख्याल रखेगा?क्या मुझे जावा में मैन्युअल रूप से धागे को रोकना है?

उत्तर

11

मामलों में आप System.exit() का उपयोग करते हैं। सभी धागे रुक जाएंगे कि वे डिमन हैं या नहीं।

अन्यथा, JVM स्वचालित रूप से Thread.setDaemon (true) द्वारा निर्धारित डेमॉन थ्रेड वाले सभी थ्रेड को रोक देगा। दूसरे शब्दों में, जेवीएम केवल तब बाहर निकल जाएगा जब शेष धागे शेष सभी डिमन थ्रेड या कोई धागे नहीं हैं।

नीचे दिए गए उदाहरण पर विचार करें, यह मुख्य विधि रिटर्न के बाद भी चलना जारी रखेगा। लेकिन यदि आप इसे डिमन पर सेट करते हैं, तो यह मुख्य विधि (मुख्य धागा) समाप्त होने पर समाप्त हो जाएगा।

public class Test { 

    public static void main(String[] arg) throws Throwable { 
     Thread t = new Thread() { 
      public void run() { 
      while(true) { 
       try { 
        Thread.sleep(300); 
        System.out.println("Woken up after 300ms"); 
       }catch(Exception e) {} 
      } 
      } 
     }; 

     // t.setDaemon(true); // will make this thread daemon 
     t.start(); 
     System.exit(0); // this will stop all threads whether are not they are daemon 
     System.out.println("main method returning..."); 
    } 
} 
3

यदि आप खूबसूरती से बाहर निकलने से पहले धागे को रोकना चाहते हैं, तो शटडाउन हुक एक विकल्प हो सकता है।

लगता है:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { 
    //Stop threads } 
}); 

देखें: hook-design

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