यह प्रश्न मुझे थोड़ी देर के लिए नाचता है लेकिन मुझे अभी तक इसका पूरा जवाब नहीं मिला है (उदाहरण के लिए यह सी # Initializing disposable resources outside or inside try/finally के लिए है)। पर विचार दो निम्नलिखित जावा कोड के टुकड़े:जावा अंत में बदलावों का प्रयास करें
Closeable in = new FileInputStream("data.txt");
try {
doSomething(in);
} finally {
in.close();
}
और दूसरी भिन्नता
Closeable in = null;
try {
in = new FileInputStream("data.txt");
doSomething(in);
} finally {
if (null != in) in.close();
}
बात यह है कि चिंता मुझे उस धागे को कुछ हद तक पल संसाधन के बीच बाधित हो गया हो अर्जित किया जाता है (उदाहरण के लिए फ़ाइल को खोला जाता है) लेकिन परिणामस्वरूप मूल्य संबंधित स्थानीय चर को असाइन नहीं किया गया है। क्या कोई अन्य परिदृश्यों धागा अलावा अन्य ऊपर बिंदु में बाधित हो गया हो है:
- InterruptedException (जैसे थ्रेड # बाधा के माध्यम से()) या OutOfMemoryError अपवाद (जैसे के माध्यम से मार डालते हैं, फेंक दिया जाता है
- JVM बाहर निकलता है प्रणाली। बाहर निकलने के())
- हार्डवेयर पूरी सूची :) के लिए असफल (या JVM में बग
मैंने पढ़ा है कि दूसरा दृष्टिकोण कुछ अधिक "मुहावरेदार" है, लेकिन IMO परिदृश्य में ऊपर वहाँ कोई अंतर नहीं है और अन्य सभी में परिदृश्य वे बराबर हैं।
तो सवाल:
क्या दोनों के बीच अंतर कर रहे हैं? अगर मुझे संसाधनों को मुक्त करने के बारे में चिंतित है (विशेष रूप से भारी बहु थ्रेडिंग अनुप्रयोगों में) तो मुझे कौन सा प्राथमिकता देना चाहिए? क्यूं कर?
अगर कोई मुझे जावा/जेवीएम चश्मे के कुछ हिस्सों को इंगित करता है तो मैं जवाब दूंगा।
जब तक आप प्रयास ब्लॉक में संसाधन प्राप्त करते हैं ... – pgras
दुर्भाग्य से "प्रबंधित" का अर्थ है कि यह संसाधन प्रबंधन समस्याओं का एक हिस्सा हल करता है (हालांकि एक बड़ा)। यदि आप बहुत सारे संसाधनों को प्राप्त करते हैं तो आपको अभी भी उन्हें जारी करने का ख्याल रखना चाहिए क्योंकि आमतौर पर उनमें सीमित मात्रा होती है। और हाँ, ताले हैं। और deadlocks। –
@pgras आप 'try' block में संसाधन क्यों प्राप्त करना चाहते हैं ?? यह सिर्फ आपके कोड की गड़बड़ी करता है। –