2013-05-27 6 views
5

कीवर्ड synchronized + विधि wait() + विधि notify() विधि के बजाय ताले (java.util.concurrent.locks.Lock) का उपयोग कर रहा है?स्पष्ट ताले बनाम लागू ताले

मैं थ्रेड-सुरक्षित रूप से कर सकते हैं ताले (स्पष्ट ताले) के बजाय निहित ताले (synchronized) का उपयोग कर कार्यक्रम?

पता के रूप में मैं हमेशा निहित ताले का उपयोग कर रहा हूं। मुझे Lock इंटरफ़ेस कार्यान्वयन द्वारा दिए गए फायदों के बारे में पता है: isLocked(), getLockQueueLength(), getHoldCount(), आदि ... हालांकि अभी भी पुराने स्कूल के रास्ते (wait() और notify()) में उन तरीकों के अलावा अन्य सीमाएं होंगी?

मैं भी एक (बूलियन निष्पक्षता) पैरामीटर जो भुखमरी की कमी की अनुमति देता है के साथ एक ताला के निर्माण की संभावना के बारे में पता कर रहा हूँ।

+1

ठीक है, यह बिल्कुल * वही नहीं है, जैसे कि वे 100% समान हैं, तो एक का अस्तित्व अनावश्यक होगा ;-) –

+1

@ जोचिम सॉर निश्चित रूप से यह पहली बार नहीं होगा जब प्रोग्रामिंग भाषा में दो समान हों एक ही काम करने के तरीके। – Patashu

+1

@Patashu: निश्चित रूप से नहीं। लेकिन यह संभावना नहीं है कि कम से कम कुछ फायदे (जैसे 'isLocked() 'विधि, ...) नहीं थे, तो वे पहले के बाद एक दूसरा विकल्प जोड़ देंगे। –

उत्तर

7

हाँ, बिल्कुल आप धागे की सुरक्षित java.util.concurrent.locks.Lock का उपयोग कर कार्यक्रम लिख सकते हैं। यदि आप java.util.concurrent.locks.Lock जैसे ReentrantLock के कार्यान्वयन को देखते हैं तो आंतरिक कार्यान्वयन पुराने synchronized ब्लॉक का उपयोग करता है।

लॉक कार्यान्वयन और अधिक व्यापक ताला संचालन से सिंक्रनाइज़ तरीकों और बयानों का उपयोग कर प्राप्त किया जा सकता हैं। वे अधिक लचीली संरचना की अनुमति देते हैं, इसमें काफी अलग गुण हो सकते हैं, और कई संबंधित हालत वस्तुओं का समर्थन कर सकते हैं।

मेरे अंतर में जोड़ synchronized कीवर्ड स्वाभाविक रूप से भाषा समर्थन में बनाया गया है। इसका मतलब यह हो सकता है कि जेआईटी synchronised blocks को Locks के साथ नहीं कर सकता है। जैसे यह synchronized blocks को जोड़ सकता है। सिंक्रनाइज़ धागे एक ताला तक पहुँचने की एक छोटी संख्या के लिए सबसे अच्छा है और Lock धागे एक ही ताले तक पहुँचने की एक उच्च संख्या के लिए सबसे अच्छा हो सकता है। synchronized ब्लॉक बनाता है अनुक्रम के बारे में कोई संकेत देता है जिसमें थ्रेड इसे प्रवेश करने की प्रतीक्षा कर रहे हैं।

2

ताले और synchronized ब्लॉक एक ही अर्थ विज्ञान है और एक जावा मेमोरी मॉडल के नजरिए से ही की गारंटी देता है प्रदान करते हैं। मुख्य अंतर यह है कि ताले अधिक नियंत्रण प्रदान करते हैं (जैसे कि tryLock या लॉक होने के लिए ताला पूछना आदि) जो अधिक लचीला और बढ़िया लॉक प्रबंधन की अनुमति देता है।

हालांकि, जब आप उन अतिरिक्त सुविधाओं की जरूरत नहीं है, यह बेहतर रूप में यह त्रुटि के लिए कमरे (जैसे आप नहीं unlock के लिए यह "भूल" कर सकते हैं) कम कर देता है एक सादे पुराने synchronized ब्लॉक का प्रयोग है।

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