उदाहरण के लिए, क्या यह बेहतर है? बेहतरएक कोशिश ब्लॉक के अंदर एक सिंक्रनाइज़ ब्लॉक या एक सिंक्रनाइज़ ब्लॉक के अंदर एक कोशिश ब्लॉक बेहतर है?
try {
synchronized (bean) {
// Write something
}
} catch (InterruptedException e) {
// Write something
}
या यह है इस:
synchronized (bean) {
try {
// Write something
}
catch (InterruptedException e) {
// Write something
}
}
मैं सोच रहा था, जो एक सबसे अच्छा अभ्यास है। जाहिर है कि मुझे कोशिश ब्लॉक के अंदर सभी कोड सिंक्रनाइज़ करना है। मैं इस मामले के बारे में बात नहीं कर रहा हूं कि मुझे कोशिश के अंदर कोड का केवल एक हिस्सा सिंक्रनाइज़ करना है (इस मामले में मुझे लगता है कि कोशिश के अंदर सिंच ब्लॉक होना बेहतर होगा)। मेरे संदेह उस मामले के बारे में हैं जहां मुझे सभी प्रयास ब्लॉक सिंक्रनाइज़ करना है।
'फिर यदि आपको पकड़ अनुभाग में संचालन करने की आवश्यकता है ... तो ये अन्य धागे को अवरुद्ध नहीं करेंगे।' हम अपवाद के कारण लॉक क्यों छोड़ देंगे? – Cratylus
@Gray की तरह, आपको पकड़ने की क्रिया को सिंक्रनाइज़ करने के लिए, या जितना संभव हो सके छोटे सिंक्रनाइज़ किए गए ब्लॉक को सिंक्रनाइज़ करने के लिए आपको इच्छित प्रभाव के अनुसार चयन करना होगा। लेकिन, मुझे लगता है कि आपको उस कोड के आस-पास के प्रयास/पकड़ ब्लॉक को रखने के लिए विचार करना चाहिए, जिसे आप वास्तव में संरक्षित करना चाहते हैं, बड़े ब्लॉक से परहेज करते हुए कहा, हम इन दो अच्छी प्रोग्रामिंग प्राइसियों को सारांशित कर सकते हैं: 1. छोटे सिंक्रनाइज़ किए गए ब्लॉक रखें 2. रखें उस कोड के आस-पास के ब्लॉक को आज़माएं/पकड़ें जिसे आप वास्तव में संरक्षित करना चाहते हैं। –
"अपवाद के कारण हम लॉक क्यों छोड़ देंगे"। चूंकि लॉग कॉल सिंक्रोनस हो सकती है और महंगे हैं? यह उस कोड पर निर्भर करता है जो 'कैच' ब्लॉक @ क्रेटिलस में है। – Gray