2012-01-04 24 views
29

मुझे वास्तव में इस विधि को कॉल करने की आवश्यकता क्यों है Runtime.getRuntime()। AddShutdownHook() और कब या क्यों मुझे अपने एप्लिकेशन को बंद करने की आवश्यकता है। क्या कोई मुझे कुछ उदाहरण देकर मुझे समझा सकता है।मुझे इस विधि को कॉल करने की आवश्यकता कब है Runtime.getRuntime()। AddShutdownHook()

धन्यवाद

उत्तर

30

जहाँ तक मुझे पता है, मैं इसे नीचे समझाऊंगा। आप इसे Google कर सकते हैं और बहुत सारी जानकारी भी पा सकते हैं।

addShutdownHook() प्रोग्राम की समाप्ति पर किए जाने वाले कुछ कार्यों को पंजीकृत करेगा। प्रोग्राम जो आप शुरू करते हैं, दो तरीकों से समाप्त होता है:

  1. मुख्य धागा (रूट) इसके चल रहे संदर्भ को समाप्त करता है;
  2. कार्यक्रम कुछ अप्रत्याशित स्थिति को पूरा करता है, इसलिए यह आगे नहीं बढ़ सकता है।

यदि आप शट डाउनहूक जोड़ते हैं, तो हुक एक धागा शुरू करेगा जो केवल समाप्ति के समय चलना शुरू कर देगा। उदाहरण के लिए:

Runtime.getRuntime().addShutdownHook(new Thread() { 
     public void run() { 
     System.out.println("Running Shutdown Hook"); 
     } 
    }); 

किसी भी बिंदु पर कार्यक्रम समाप्ति के समय एक Running Shutdown Hook प्रिंट होगा। आप System.exit(0) भी कॉल कर सकते हैं।

उदाहरण के लिए, आप Google कर सकते हैं, उनमें से पर्याप्त हैं। और सवाल 'आप इसका कब उपयोग करना चाहिए' पूछना है 'catchtry-catch कथन में क्या करता है' पूछना है।

आप की तरह कई स्थितियों हो सकता है: फाइल सिस्टम में

  • अपने कार्यक्रम बनाया था कई अस्थायी फ़ाइलें आप इसे हटाना चाहते हैं;
  • आपको समाप्त होने से पहले किसी अन्य प्रक्रिया/मशीन पर एक संकट संकेत भेजने की आवश्यकता है;
  • अनपेक्षित व्यवहारों पर किसी भी क्लीन-अप क्रियाओं, लॉगिंग या त्रुटि के बाद क्रियाएं निष्पादित करें।

यह सब कुछ समय के लिए आवश्यक होगा।

आप में यहाँ Example 1 या Example 2

+0

आपके द्वारा समाप्त करने के कारण जो कारण हैं वे गलत हैं। सही संस्करण के लिए Buhake का जवाब देखें। – meriton

8

आप केवल बंद हुक के बारे में चिंता है जब आप जब एक बंद आभासी मशीन पर होता है ऐसा करने के लिए कुछ करना चाहते हैं।

Javadoc से:

  • कार्यक्रम सामान्य रूप से बाहर निकालता है, जब अंतिम गैर-डेमॉन धागा बाहर निकलता है या जब:

    जावा आभासी मशीन घटनाओं के दो प्रकार के जवाब में बंद हो जाता है बाहर निकलें (समतुल्य, System.exit) विधि का आह्वान किया गया है, या

  • वर्चुअल मशीन को उपयोगकर्ता इंटरप्ट के जवाब में समाप्त कर दिया गया है, जैसे टाइपिंग सी, या सिस्टम-वाइड इवेंट, जैसे उपयोगकर्ता लॉगऑफ या सिस्टम शटडाउन।

इस प्रकार, एक बंद हुक एक प्रारंभ और प्रारंभ नहीं किया गया धागा जब एक JVM बंद होता है निष्पादित हो जाता है।

शटडाउन हुक के लोकप्रिय उदाहरण एप्लिकेशन सर्वर (जैसे जेबॉस एएस) में मौजूद हैं। जब आप Ctrl + सी दबाते हैं, तो JVM बाहर निकलने से पहले सभी Runtime शट डाउन हुक पंजीकृत करता है (जैसे जेबॉस शटडाउन हुक)।

+0

लेकिन कैसे होगा एक थ्रेड रन जब 'JVM' ही shutdowned है जा सकते हैं उदाहरण के लिए। – garg10may

+0

जब JVM पहले ही बंद हो चुका है, तो सभी थ्रेड पहले ही समाप्त कर दिए जाएंगे। मैं आपका प्रश्न समझ नहीं पा रहा हूं। –

+1

@ garg10may - JVM बंद होने से ठीक पहले, shutDownHook के भीतर मौजूद कोड लागू किया जाएगा। addShutDownHook विधि इनपुट तर्क के रूप में एक धागा लेता है। आप इस थ्रेड में अंतिम JVM बाहर निकलने से पहले किसी भी कार्य को निर्दिष्ट कर सकते हैं जिसे आप ख्याल रखना चाहते हैं। –

2

एक मामला यह है कि, यदि आप किसी भी डिमन थ्रेड को अपने जेवीएम शट डाउन (या) किसी भी अन्य बैकएंड थ्रेड्स (ज्यादातर डेमॉन थ्रेड) से पहले बंद करने की आवश्यकता है, तो उसे बंद करने की आवश्यकता है, आप शट डाउन हुक लिखेंगे और उपरोक्त का उपयोग करके निष्पादित करेंगे कोड। यहां कुछ दिनों पहले हमारे पास दिलचस्प चर्चा है। Shutdown hook

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