2013-01-25 9 views
35

में सिंक्रनाइज़ विधि क्यों शामिल नहीं है जब मैं इंटरफ़ेस में किसी विधि पर synchronized का उपयोग करता हूं, तो संकलक एक त्रुटि उत्सर्जित करता है। क्या आप मुझे बता सकते हैं ऐसा क्यों होता है?इंटरफ़ेस

कारण क्या है (तार्किक रूप से) synchronizedinterface पर किसी विधि पर लागू नहीं किया जा सकता है?

मैंने थ्रेडपूल in this link पर इंटरफेस बनाने की कोशिश की। मेरे उपरोक्त कोड में इंटरफ़ेस बनाने में मेरी सहायता करें।

उत्तर

64

क्योंकि synchronized एक कार्यान्वयन विवरण है। विधि के एक कार्यान्वयन को विधि को सिंक्रनाइज़ करने की आवश्यकता हो सकती है, जबकि किसी अन्य को इसकी आवश्यकता नहीं हो सकती है। कॉलर परवाह नहीं है कि विधि सिंक्रनाइज़ है या नहीं। यह अनुबंध का हिस्सा नहीं है, जो बताता है कि विधि क्या करता है। अनुबंध को पूरा करने के लिए कौन सी सिंक्रनाइज़ेशन तकनीक, यदि कोई है, तो अप्रासंगिक है।

+0

मैं आपके उत्तर से बहुत प्रभावित हूं। क्या आप अपने उत्तर की दूसरी पंक्ति का विस्तार कर सकते हैं। क्या आप मुझे मेरे प्रश्न में पूछे गए थ्रेडपूल (लिंक देखें) पर इंटरफ़ेस बनाने में मेरी सहायता कर सकते हैं। – devsda

+1

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

+0

असल में मैंने कोड बनाया जो इनबिल्ड क्लास का उपयोग करता है। लेकिन मेरे शिक्षक ने मुझे बेहतर समझने के लिए सरल डेटा संरचनाओं से यह करने के लिए कहा। यही कारण है कि मैंने इनबिल्ट कक्षाओं के बिना कोड बनाने की कोशिश की। यदि मैं 'सिंक्रनाइज़ किए गए' कीवर्ड को हटा देता हूं तो कोड कुछ समस्याएं उत्पन्न करता है, जैसे सूची से कार्यों को एक साथ हटाने, जो मैं नहीं चाहता हूं। तो मुझे इस scenerios के लिए कोई समझौता पथ बताओ, मुझे पालन करना चाहिए। – devsda

10

सिंक्रनाइज़ एक कार्यान्वयन विवरण है और यह एक इंटरफेस में नहीं है।

आपके पास सभी प्रकार के कार्यान्वयन हो सकते हैं जो थ्रेडसेफ हो सकते हैं जिसमें कीवर्ड सिंक्रनाइज़ किए गए कीवर्ड का उपयोग शामिल नहीं होता है।

आप कुछ एनोटेशन का उपयोग करने पर विचार कर सकते हैं कि कार्यान्वयन थ्रेड सुरक्षित होना चाहिए। उदाहरण के लिए http://jetbrains.dzone.com/tips/concurrency-hot-try-jcip बताता है कि जेसीआईपी समवर्ती एनोटेशन का उपयोग कैसे करें।

बीटीडब्ल्यू। सिंक्रनाइज़ किए जाने के बजाय, आप जावा समवर्ती ढांचे के साथ आरामदायक हो सकते हैं। इन दिनों सिंक्रनाइज़ किए गए निम्न स्तर की संरचनाओं का उपयोग करना एक विरोधी पैटर्न का थोड़ा सा माना जाता है।

4

सरल उत्तर सिंक्रनाइज़ किया गया है विधि कार्यान्वयन के बारे में बात कर रहा है, लेकिन इंटरफेस में सभी विधियां अमूर्त हैं जिसका मतलब कोई कार्यान्वयन नहीं है।