यदि आप लॉकिंग तंत्र (या बाधाओं को सिंक भी करते हैं) का उपयोग करने के बारे में बात कर रहे हैं तो बस java.util.concurrent.Lock
का उपयोग करें। स्पष्ट सुझाव उपयोगकर्ता को ReentrantLock
है जो Synch
पर प्रतिनिधि करता है। सिंच एक एक्यूएस है जो बदले में LockSupport
का उपयोग करता है।
यह सब आपके लिए कवर के तहत किया गया है।
संपादित करें:
नहीं की AbstractQueuedSynchronizer
(AQS) का व्यावहारिक उपयोग पर चलते हैं।
कन्करेंसी निर्माण करती है, हालांकि उनके उपयोग में बहुत अलग हो सकती सभी एक ही अंतर्निहित कार्यों हो सकता है।
आईई। कुछ स्थितियों के तहत इस धागे को पार्क करें। किसी अन्य स्थिति के तहत एक थ्रेड उठो।
यह निर्देशों का एक बहुत व्यापक सेट है लेकिन यह स्पष्ट करता है कि अधिकांश समवर्ती संरचनाओं को कुछ सामान्य कार्यक्षमता की आवश्यकता होगी जो उनके लिए उन परिचालनों को संभालने में सक्षम होंगे। एक्यूएस दर्ज करें। पांच प्रमुख सिंक्रनाइज़ेशन बाधाएं हैं।
ReentrantLock
ReadLock
WriteLock
Semaphore
CountDownLatch
अब, इन सभी पांच संरचनाओं जब उन्हें प्रयोग नियमों का बहुत अलग सेट है। एक CountdownLatch
कई धागे एक ही समय में चलाने की अनुमति दे सकता है लेकिन एक (या अधिक) धागे को तब तक प्रतीक्षा करने के लिए मजबूर करता है जब तक कि कम से कम संख्या में धागे ने कहा था।
ReentrantLock
एक महत्वपूर्ण खंड में प्रवेश करने के लिए केवल एक थ्रेड को मजबूर करता है और इसे पूरा करने के लिए प्रतीक्षा करने के लिए अन्य सभी धागे को कतार में डाल देता है।
ReadLock
किसी भी लिखने के धागे को तब तक महत्वपूर्ण खंड में पढ़ने की अनुमति देता है जब तक एक लिखने वाले लॉक को अधिग्रहित नहीं किया जाता है।
उदाहरण चल सकते हैं, लेकिन यहां बड़ी तस्वीर यह है कि वे सभी AQS का उपयोग करते हैं। ऐसा इसलिए है क्योंकि वे उन प्राथमिक कार्यों का उपयोग करने में सक्षम हैं जो AQS प्रदान करता है और इसके शीर्ष पर अधिक जटिल कार्यक्षमता लागू करता है। एक्यूएस आपको अनपर्क पार्क करने और थ्रेड उठाने की अनुमति देता है (अगर आवश्यकता हो तो अंतःस्थापित हो) लेकिन इस तरह से आप कई जटिल कार्यों का समर्थन कर सकते हैं।
स्रोत
2010-07-22 17:55:19
डब्ल्यू: मैंने देखा LockSupport 'AbstractQueuedLongSynchronizer' में प्रयोग किया जाता है, आप का सुझाव यह एक तरह से है आंतरिक एपीआई कक्षा? बस इसके लिए कोड का कोई भी चित्रकारी टुकड़ा देखना चाहता था ... – Max
@ मैक्स लॉकसपोर्ट एक उपयोगिता वर्ग है जिसे कोई भी उपयोग कर सकता है। यह जरूरी नहीं है कि एक आंतरिक वर्ग Unsafe.java एक आंतरिक वर्ग का एक अच्छा उदाहरण है। लॉकस्पोर्ट सार्वजनिक है ताकि अन्य लोग AQS –
डब्ल्यू का अपना संस्करण लिख सकें। धन्यवाद जॉन, मुझे पता है कि यह विस्तार के लिए है। आपके उत्तर ने मुझे एक प्रश्न दोहराया: आम तौर पर 'सारणी क्यूयूड सिंक्रनाइज़र' का उपयोग मेरे लिए अस्पष्ट दिखाई देता है। – Max