मैं एक लाइसेंस प्राप्त एपीआई का उपयोग कर रहा हूं जिसमें लाइसेंस सर्वर से लाइसेंस ऑब्जेक्ट प्राप्त करने/रिलीज करने का एक तरीका है जिसमें लाइसेंस की सीमित संख्या है। मेरे आवेदन की शुरुआत में, मैं लाइसेंस प्राप्त करने के लिए विधि को कॉल करता हूं, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि यह तब भी जारी हो जाए जब मेरा प्रोग्राम अचानक समाप्त हो जाता है/अपवाद (अपवाद, SIGTERM, आदि)। क्या शट डाउन इस मुद्दे पर पहुंचने का सबसे अच्छा तरीका है?जावा एप्लिकेशन से बाहर निकलने से पहले कोड का एक टुकड़ा कैसे चलाया जाता है
उत्तर
@thedan कठिन JVM दुर्घटनाओं के बारे में सही है एक "रक्षा की अंतिम पंक्ति" पैदा करते हैं। यदि कोई JVM कड़ी मेहनत करता है या इसे सिगकिल मिल जाता है, तो उसे बाहर निकलने से पहले कुछ भी चलाने का मौका नहीं मिलेगा। उस परिदृश्य में जावा में इसका समाधान करने के लिए आप कुछ भी नहीं कर सकते हैं। (लेकिन स्थिति अन्य भाषाओं में भी वही है ...)
हालांकि यदि JVM सिस्टम को समाप्त करने वाले सभी गैर-डेमॉन धागे के जवाब में व्यवस्थित शटडाउन करता है, तो सिस्टम.एक्सिट() को कॉल करना, सिगिनट प्राप्त करना और इसी तरह , तो JVM शट डाउन हुक चलाने का प्रयास करेगा। Q&A पृष्ठ और javadocs में जावा के शट डाउन हुक तंत्र पर अधिक जानकारी है।
finally
दृष्टिकोण भी एक विकल्प है, लेकिन केवल तभी काम करता है जब प्रश्न में धागा JVM से बाहर निकलता है। यह तब नहीं होगा जब System.exit()
कहा जाता है या JVM को सिग्नल द्वारा समाप्त कर दिया जाता है। शटडाउन हुक अधिक परिस्थितियों में काम करते हैं।
(मेरे दिमाग में, finally
वास्तव में पूरे एप्लिकेशन के बजाय एकल धागे पर साफ प्रदर्शन करने के लिए है। हालांकि यदि आपके एप्लिकेशन में केवल एक धागा होता है ... या यदि उसके पास एक मास्टर थ्रेड है जो व्यवस्थित रूप से ज़िम्मेदार है शट डाउन ... फिर finally
एप्लिकेशन क्लीनअप के उद्देश्य को पूरा कर सकता है।)
वास्तविक समाधान लाइसेंस प्राप्त एपीआई कॉन्फ़िगर करने के लिए इतना है कि लाइसेंस प्रबंधक का पता लगा सकते जब आवेदन के लिए एक लाइसेंस का उपयोग कर उदाहरण इसे जारी बिना दूर चला जाता है। चाहे यह संभव हो, लाइसेंस प्रबंधक पर निर्भर करता है।
यदि प्रोग्राम JVM के क्रैश के माध्यम से समाप्त हो जाता है, तो आप किसी भी चीज़ पर भरोसा नहीं कर सकते हैं।
यदि प्रोग्राम एक अपवाद के माध्यम से समाप्त हो जाता है जिसमें JVM शामिल नहीं होता है तो आप कोशिश/पकड़/अंत में ब्लॉक में सब कुछ लपेटने में सक्षम होना चाहिए। आखिरकार ब्लॉक में मौजूद किसी भी कोड को आपके कोड से बाहर निकलने से पहले चलाने की गारंटी दी जाएगी।
अपवादों के लिए, आप के शरीर को try/catch/block
में लपेट सकते हैं। SIGTERM
सिग्नल को संभालने के लिए, आप add a shutdown hook कर सकते हैं। हालांकि, शटडाउन हुक SIGKILL
जैसे सिग्नल के लिए ट्रिगर होने की गारंटी नहीं है।
Java doc से:
दुर्लभ परिस्थितियों में आभासी मशीन गर्भपात हो सकता है, कि, सफाई से बंद किए बिना चलना बंद है । यह तब होता है जब वर्चुअल मशीन को बाहरी रूप से समाप्त कर दिया जाता है, उदाहरण के लिए यूनिक्स पर
SIGKILL
सिग्नल याTerminateProcess
माइक्रोसॉफ्ट विंडोज पर कॉल करें। वर्चुअल मशीन मूल रूप से खराब हो सकती है, उदाहरण के लिए, आंतरिक डेटा संरचनाओं को दूषित करने या तक पहुंचने का प्रयास करने की कोशिश नहीं कर रहा है। यदि वर्चुअल मशीन बंद हो जाती है तो कोई गारंटी नहीं दी जा सकती है कि कोई शटडाउन हुक चलाया जाएगा या नहीं।
आप कभी Sytem.exit() को कॉल करके इसे प्राप्त नहीं करते हैं। मुख्य में() आपके साथ
try {
startApp();
} catch (Exception ex) {
// do some logging
} finally {
releaseLicense();
}
- 1. जावा एप्लिकेशन से बाहर निकलने से पहले सफाई
- 2. 1 से बाहर निकलने वाला कोड C#
- 3. क्या एक PHP स्क्रिप्ट बाहर निकलने से पहले सामान्य कोड निष्पादित कर सकता है()?
- 4. SmtpClient.SendAsync - कॉलबैक ट्रिगर होने से पहले बाहर निकलने वाले एप्लिकेशन को कैसे रोकें?
- 5. जब कोई ऑब्जेक्ट स्कोप से बाहर हो जाता है तो कोड चलाया जा सकता है .Net?
- 6. स्थापना बाहर निकलने के कोड एक अपवाद
- 7. क्या Win32 एप्लिकेशन से बाहर निकलने से पहले सभी थ्रेड को स्पष्ट रूप से रोकना आवश्यक है?
- 8. बाहर निकलने के कोड के साथ प्रोग्राम से कैसे बाहर निकलें: सी #
- 9. PHP स्क्रिप्ट ब्राउज़र से बाहर निकलने से बाहर नहीं निकलता
- 10. जावा स्विंग बंद खिड़की से बाहर निकलने के बिना
- 11. कोड का एक टुकड़ा के बाद ही सभी धागे से किया जाता है
- 12. जावा एप्लिकेशन कैसे बनाएं, जिसे एक क्लिक से चलाया जा सकता है?
- 13. बाहर निकलने के कार्यक्रम पर एंड्रॉइड एप्लिकेशन
- 14. क्या प्रक्रिया से बाहर निकलने पर स्वचालित रूप से झुंड जारी किया जाता है?
- 15. एप्लिकेशनडिड एंटरबैकग्राउंड हमेशा एप्लिकेशन से पहले बुलाया जाता है?
- 16. बैश प्रक्रिया प्रतिस्थापन और बाहर निकलने कोड
- 17. कार्यक्रम बाहर निकलने के
- 18. API के माध्यम से Win32 एप्लिकेशन से कैसे बाहर निकलें?
- 19. बाहर निकलने से पहले पर्ल में बाल प्रक्रियाओं को मारने का सही तरीका क्या है?
- 20. विंडोज फॉर्म ऐप से बाहर निकलें कोड
- 21. लूप से बाहर निकलने के लिए वापसी का उपयोग करना?
- 22. पृथक संग्रहण एप्लिकेशन सेटिंग्स एप्लिकेशन से बाहर निकलने के बाद नहीं रहती
- 23. क्या यह मुख्य से पहले कार्यक्रम से बाहर निकलने के लिए अच्छी तरह से परिभाषित व्यवहार है?
- 24. स्थान से div नाम से बाहर निकलने का कोई तरीका है (x, y cords)
- 25. pthreads: कोड को कैसे जोर देना एक थ्रेड किए गए संदर्भ में चलाया जाता है
- 26. उच्च स्मृति उपयोग अनुप्रयोग में स्मृति से बाहर निकलने से कैसे बचें? सी/सी ++
- 27. आप राइनो से बाहर निकलने के कोड कैसे वापस कर सकते हैं?
- 28. बाहर निकलने का संदेश कैसे बनाएं
- 29. से पहले और जावा में एक कहा जाता विधि
- 30. किसी अन्य जावा एप्लिकेशन से एक जावा एप्लिकेशन लॉन्च करें
क्या आपका मतलब 'आखिरकार' खंड था? –