2010-07-12 22 views
9

मेरे पास कक्षा में 2 सिंक्रनाइज़ विधियां हैं विधि 1() और method2()। एक थ्रेड का कहना है कि "थ्रेड 1" सिंक्रनाइज़ विधि 1() को निष्पादित करके कक्षा के उस ऑब्जेक्ट पर लॉक रखता है। क्या कोई अन्य थ्रेड "थ्रेड 2" कह सकता है, उसी समय विधि 2() के माध्यम से लॉक तक पहुंच सकता है जबकि "थ्रेड 1" होल्डिंग ताला।एक ही ऑब्जेक्ट के दो अलग सिंक्रनाइज़ किए गए तरीकों?

यह मामला java.util.Vector क्लास के अनुरूप है() और निकालें() विधियों को सिंक्रनाइज़ किया गया है। कृपया इस मामले को भी समझाएं।

उत्तर

10

सं। synchronized जावा में विधि पूरी विधि के समान है जिसमें उसके शरीर को synchronized (this) ब्लॉक में लपेटा गया है। तो यदि एक धागा synchronized विधि में है, तो एक और थ्रेड एक ही ऑब्जेक्ट पर एक अलग synchronized विधि में एक साथ नहीं हो सकता है।

यह Vector से संबंधित तरीका यह है कि आप कुछ कोड तत्व को निकालने का प्रयास नहीं करना चाहते हैं जबकि अन्य कोड तत्व जोड़ने की कोशिश कर रहा है। यह महत्वपूर्ण खंड की अवधारणा है; आप न केवल किसी और को जो भी कर रहे हैं, करने की कोशिश नहीं करना चाहते हैं, आप यह भी नहीं चाहते कि कोई और कुछ अलग करे जो हस्तक्षेप करेगा।

+0

धन्यवाद Borealid .. लेकिन अगर इस मामले में, क्यों जावा तुल्यकालन तरीकों के लिए विशिष्ट प्रदान करता है, यह सिर्फ के लिए प्रदान कर सकते हैं पूरी कक्षा? – JavaUser

+1

@JavaUser: 'सिंक्रनाइज़ (यह)' का मतलब यह नहीं है कि पूरी कक्षा 'सिंक्रनाइज़' है। इसका मतलब है कि आप उस उदाहरण के ऑब्जेक्ट लॉक को प्राप्त करते हैं जिस पर विधि कहा जाता था। आप अनिवार्य रूप से * सभी * विधियों को 'सिंक्रनाइज़' नहीं करना चाहते हैं (वास्तव में, आप शायद ही कभी करेंगे)। बहुप्रचारित कोड के प्रदर्शन को प्राप्त करने के लिए आपको प्रोग्राम शुद्धता को संरक्षित करते समय जितना संभव हो उतना ताले का उपयोग करना चाहिए - प्रत्येक बार जब आप एक विरोधाभासी ताला लगाते हैं, तो कुछ थ्रेड इंतजार करेंगे, कुछ भी नहीं करेंगे। – Borealid

+0

@ बोरेलिड.. जिस क्षण मैंने किसी भी विधि में सिंक्रनाइज़ किया है, इसका मतलब है कि जब मैं उस विधि को कॉल करता हूं तो पूरी ऑब्जेक्ट लॉक होती है .. ठीक है? – JavaUser

3

थ्रेड 2 लॉक तक पहुंच सकता है लेकिन उस लॉक द्वारा संरक्षित ब्लॉक में प्रवेश नहीं कर सकता है जब तक कि थ्रेड 1 एक ही लॉक धारण कर रहा हो।

+0

उपयोगी था। धन्यवाद! – peakit

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