2012-12-07 8 views
5

में शटडाउन हुक के अंदर एक अपवाद फेंकने पर क्या होता है यदि जावा में शटडाउन हुक के निष्पादन के दौरान एक अनचाहे अपवाद फेंक दिया जाता है, तो बाकी शटडाउन हुक (यदि कोई हो) चलाने के बिना तुरंत जेवीएम बाहर निकलता है ?जावा

Uncaught अपवाद हैं, किसी भी अन्य सूत्र में के रूप में बंद हुक में नियंत्रित किया जाता है थ्रेड ThreadGroup वस्तु की uncaughtException विधि लागू द्वारा: javadocs से। इस विधि का डिफ़ॉल्ट कार्यान्वयन को सिस्टम.एर में अपवाद का स्टैक ट्रेस प्रिंट करता है और थ्रेड को समाप्त करता है; यह वर्चुअल मशीन से बाहर निकलने या रोकने का कारण नहीं बनता है।

यह अन्य बंद हुक चलाना चाहिए की तरह लगता है ...

एक सवाल अनुवर्ती कार्रवाई के रूप में, अपने शायद नहीं एक अच्छा विचार कोड का एक टुकड़ा है कि संभावित बंद हुक में एक अपवाद फेंक सकता है के लिए? यदि आप इससे बच नहीं सकते हैं, तो शटडाउन हुक के अंदर अपवाद को पकड़ने का यह एक अच्छा अभ्यास है?

उत्तर

5

चूंकि addShutdownHook विधि थ्रेड लेती है, प्रत्येक व्यक्तिगत शटडाउन हुक अपना स्वयं का थ्रेड होता है। बेजोड़ अपवादों के लिए डिफ़ॉल्ट व्यवहार एक त्रुटि संदेश मुद्रित करना और थ्रेड को समाप्त करना है। चूंकि हुक के समान व्यवहार होता है, इसलिए त्रुटि में समाप्त होने वाला एक शटडाउन हुक दूसरों को चलने से नहीं रोकता है।

ध्यान दें कि मैंने वास्तव में इसका परीक्षण नहीं किया है ...

+1

धन्यवाद! मैंने इस व्यवहार का परीक्षण किया है, आप सही हैं, किसी विशेष शट डाउन हुक में अपवाद अन्य हुक को चलने से नहीं रोकता है। –

1

शटडाउन हुक के अंदर चलने वाला कोड आपके मुख्य थ्रेड में चलने वाले कोड के समान सर्वोत्तम प्रथाओं के अधीन है: यदि आपको आवश्यकता है तो लॉग अप अपवाद, अगर आपको आवश्यकता है तो लॉग इन करें या अपवादों को केवल स्टडआउट पर प्रिंट करें।

+0

आह, यह समझ में आता है। –