मेरे पास कक्षा में 2 सिंक्रनाइज़ विधियां हैं विधि 1() और method2()। एक थ्रेड का कहना है कि "थ्रेड 1" सिंक्रनाइज़ विधि 1() को निष्पादित करके कक्षा के उस ऑब्जेक्ट पर लॉक रखता है। क्या कोई अन्य थ्रेड "थ्रेड 2" कह सकता है, उसी समय विधि 2() के माध्यम से लॉक तक पहुंच सकता है जबकि "थ्रेड 1" होल्डिंग ताला।एक ही ऑब्जेक्ट के दो अलग सिंक्रनाइज़ किए गए तरीकों?
यह मामला java.util.Vector क्लास के अनुरूप है() और निकालें() विधियों को सिंक्रनाइज़ किया गया है। कृपया इस मामले को भी समझाएं।
धन्यवाद Borealid .. लेकिन अगर इस मामले में, क्यों जावा तुल्यकालन तरीकों के लिए विशिष्ट प्रदान करता है, यह सिर्फ के लिए प्रदान कर सकते हैं पूरी कक्षा? – JavaUser
@JavaUser: 'सिंक्रनाइज़ (यह)' का मतलब यह नहीं है कि पूरी कक्षा 'सिंक्रनाइज़' है। इसका मतलब है कि आप उस उदाहरण के ऑब्जेक्ट लॉक को प्राप्त करते हैं जिस पर विधि कहा जाता था। आप अनिवार्य रूप से * सभी * विधियों को 'सिंक्रनाइज़' नहीं करना चाहते हैं (वास्तव में, आप शायद ही कभी करेंगे)। बहुप्रचारित कोड के प्रदर्शन को प्राप्त करने के लिए आपको प्रोग्राम शुद्धता को संरक्षित करते समय जितना संभव हो उतना ताले का उपयोग करना चाहिए - प्रत्येक बार जब आप एक विरोधाभासी ताला लगाते हैं, तो कुछ थ्रेड इंतजार करेंगे, कुछ भी नहीं करेंगे। – Borealid
@ बोरेलिड.. जिस क्षण मैंने किसी भी विधि में सिंक्रनाइज़ किया है, इसका मतलब है कि जब मैं उस विधि को कॉल करता हूं तो पूरी ऑब्जेक्ट लॉक होती है .. ठीक है? – JavaUser