2013-02-15 15 views
5

मैं जब मैं isundermaintanacetrue गुजर रहा अंत में क्रियान्वित नहीं My application's under maintanace moduleSystem.exit() unexecutable परिणाम अंत में ब्लॉक

try { 
    if (isUndermaintanace) { 
     System.exit(1); 
    } else { 
     prepareResources(); 
    }   
} catch (Exception e) { 
    printStack(e); 
} finally { 
    cleanResources(); 
} 

पर काम कर रहा हूँ।

मुझे क्या याद आ रही है? क्या ऐसा करने का कोई और तरीका है?

+0

शायद एकमात्र चीज जो आप कर सकते हैं वह है 'System.exit (1)' को अपने ऐप को किसी अन्य तरीके से बंद करने के लिए। अकेले पहले वाक्य के लिए –

उत्तर

15

Finally यदि आप वीएम को मारते हैं तो निष्पादित नहीं होते हैं (या यदि वीएम किसी अन्य तरीके से मर जाता है)। System.exit() प्रोग्राम को मारने की बजाय एक कच्ची विधि है, जबकि अंत में एक उच्च स्तरीय ओओपी अवधारणा है। System.exit() बेल्स बहुत जल्दी, जितना संभव हो उतना कम सफाई के रूप में कर रहे हैं।

यदि आप कार्य प्रबंधक में गए और प्रक्रिया को मार दिया या प्रक्रिया पर kill -9 जारी किया तो क्या आप अंततः निष्पादित होने की उम्मीद करेंगे? यह अस्पष्ट है (बहुत अस्पष्ट) एक ही बात है।


ध्यान देने योग्य कुछ चीजें हैं। विशेष रूप से, मैंने पोस्ट के पहले भाग में थोड़ा सा झूठ बोला। वास्तव में तुरंत एक कार्यक्रम की हत्या के लिए System.exit() पसंद करना भ्रामक है। विशेष रूप से, शट डाउन हुक चलाए जाते हैं, और if configured, अंतिमकर्ता वास्तव में भाग सकते हैं। नोट, हालांकि, दस्तावेज़ runFinalizersOnExit का उपयोग करने के खिलाफ काफी दृढ़ता से सुझाव देते हैं।

+0

+1। इसे रखने का एक शानदार तरीका क्या है। – corsiKa

+1

लेकिन क्या ऐसा करने के लिए कोई अन्य तरीका है ?? – user000001

+0

@ user000001 बस उस पते के लिए मेरा जवाब संपादित करें। ध्यान दें कि System.exit() के बाद फ़ाइनलाइज़र चलाने की आवश्यकता है हालांकि टूटी हुई डिज़ाइन का एक गंभीर संकेत है। – Corbin

1

केवल असाधारण मामला जहां अंत में ब्लॉक पर अमल नहीं होता है अगर आप 'System.exit (1)' कहते हैं finally block, जो है System.exit(1) के रूप में अपेक्षित व्यवहार JVM समाप्त होगा पहले।

2

System.exit किसी अन्य कोड निष्पादन (जैसे finally ब्लॉक) को छोड़कर तुरंत प्रोग्राम से बाहर निकलता है। यदि आप finally ब्लॉक चलाने के बाद प्रोग्राम से बाहर निकलना चाहते हैं, तो इसके बजाय अपवाद फेंक दें।

2

यदि JVM बाहर निकलता है तो कोशिश या पकड़ कोड निष्पादित किया जा रहा है उदा। System.exit(), फिर आखिरकार ब्लॉक निष्पादित नहीं हो सकता है। इसी प्रकार, यदि कोशिश या पकड़ कोड निष्पादित करने वाला थ्रेड बाधित या मारे गए हैं, तो आखिर में ब्लॉक जारी नहीं हो सकता है, भले ही एप्लिकेशन पूरी तरह से जारी रहे।

1

यदि आप System.exit() पर कॉल करते हैं तो आपका कोड finally निष्पादित नहीं करेगा, क्योंकि वह कॉल आपके JVM को समाप्त कर देता है।

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