2016-04-26 10 views
5

ठीक है, मेरे काम पर हम प्रयास-संसाधनों और अपवाद दमन पर बहस कर रहे हैं।जावा कोशिश-के-संसाधन बहस

त्वरित पुनरावृत्ति: जावा 7 से प्रयास करें, संसाधनों को बंद करने के लिए अंततः उस परेशानी की आवश्यकता को समाप्त कर देता है। मुझे व्यक्तिगत रूप से लगता है कि यह रास्ता अधिक सुरुचिपूर्ण है, लेकिन मेरे पास एक सहकर्मी है जो आश्वस्त नहीं है। वह यह पसंद नहीं करता कि एक अपवाद दबा दिया जाता है, और बहस कर रहा है कि हम इसके माध्यम से जानकारी खो देते हैं।

पहले मैं इसके लिए अपना शब्द ले रहा था, क्योंकि मैं जूनियर देव हूं और वह वरिष्ठ है, मैं नया हूं, लेकिन मुझे हाल ही में पता चला है कि हे, सभी जानकारी इसे स्टैक ट्रेस में बनाती है, जिसमें शामिल है दबाया अपवाद। तो वहां कोई जानकारी नहीं खो गई है।

इस बहस का आखिरी टुकड़ा जिसे मैं ढूंढ रहा हूं (क्योंकि मैं संसाधनों के साथ प्रयास करने की वकालत कर रहा हूं) यह है कि ऑटो-क्लोजेबल उस अपवाद को कैसे संभालता है। आइए मान लें कि संसाधन बंद करने का प्रयास करते समय एक अपवाद फेंक दिया गया है, क्या ऐसी संभावना है कि संसाधन खुले और रिसाव रहे? आखिरकार यह इतना बड़ा सौदा नहीं हो सकता है, क्योंकि लॉग हमें इस मुद्दे पर चेतावनी देंगे।

बस उत्सुक। बहुत बहुत धन्यवाद।

+2

तो आपकी समस्या क्या है? अपने सहयोगी को कैसे मनाने के लिए? –

+2

"मान लें कि संसाधन बंद करने का प्रयास करते समय एक अपवाद फेंक दिया गया है, क्या संभावना है कि संसाधन खुला और रिसाव रह सके?" यह बिल्कुल उसी हद तक खुला रहेगा क्योंकि प्री-जावा -7 कोशिश/आखिरकार कोड इसे खुला रहने देगा। मुझे लगता है कि आपके पास कई बार बंद करने की कोशिश करने के लिए कुछ जगह नहीं है, उदाहरण के लिए? –

+1

अपवाद जो दबाए गए हैं _are all_ पर खो नहीं गए हैं। [इस प्रस्तुति] की स्लाइड 8 देखें (https://docs.google.com/presentation/d/10mD-_M_fXOU3LOP5hmqVTlcJhgn5FUCwTLIdor2Z4qM/edit?usp=sharing)। – fge

उत्तर

8

आप सही हैं कि अपवाद को दबाने से परिणाम खोने का नतीजा नहीं होता है। इसके बारे में आपके सहकर्मी की चिंता भूमिहीन है। के बिंदु की कोशिश-साथ-संसाधन हैं:

  • सुनिश्चित करें कि संसाधनों को बंद कर दिया हो, क्या फेंक दिया जाता है की परवाह किए बिना उन्हें का उपयोग करते समय बनाने के लिए, और रिवर्स वे किस क्रम में घोषित कर रहे हैं में,

  • यह सुनिश्चित करने के लिए कि बंद होने पर अपवादों को खोने के लिए प्रयास ब्लॉक में अपवादों को फेंक दिया गया है, और

  • यह सुनिश्चित करने के लिए कि अभी भी बंद किए गए अपवादों को दबाए गए अपवादों के रूप में बनाए रखा जाए, इसलिए कोई जानकारी गुम हो गई है।

यदि कोई संसाधन बंद करना अपवाद फेंकता है, तो आप किसी भी मामले में इसके बारे में कुछ भी नहीं कर सकते हैं। जेडीबीसी में डेटाबेस ऑब्जेक्ट्स डेटाबेस सर्वर को वापस आवंटित करने के लिए कहने के लिए डेटाबेस सर्वर पर संवाद करते हैं, और यदि बंद हो जाता है तो वे खुले रहेंगे। (और पुनः प्रयास करना आम तौर पर व्यर्थ है क्योंकि समस्या आम तौर पर नेटवर्क या कनेक्शन के बारे में कुछ बदल जाती है।) लेकिन सर्वर अंततः उन्हें साफ़ कर देगा, और यह क्लाइंट कोड के हाथों से बाहर है। दोनों संसाधनों के साथ प्रयास करें और पुरानी कोशिश-अंततः मुहावरे संसाधनों को बंद करने का एक समान काम करते हैं, यह केवल अधिक काम है और अंततः मुहावरे के साथ अधिक टाइपिंग है।

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

लेकिन व्यावहारिक रूप से बहुत कम लोगों को इस तरह के घोंसले के लिए सहिष्णुता होती है और वे शॉर्टकट लेते हैं जो संसाधन लीक का नेतृत्व करते हैं (आमतौर पर कनेक्शन जो बंद नहीं होते हैं क्योंकि आखिरकार ब्लॉक में पहले कॉल विफल हुआ)। लोग कोड लिखते हैं जो अपवाद-मास्किंग (दूसरे बुलेट प्वाइंट में उल्लिखित) का कारण बनता है, जहां बंद होने पर अपवाद को ट्राई-ब्लॉक के खोने के लिए एक अपवाद फेंक दिया जाता है; कोशिश-के-संसाधन इस तरह की त्रुटि को रोकता है। निश्चित रूप से संसाधनों के साथ प्रयास करने के लिए एक जगह है।

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

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