साझा संसाधन पर एकाधिक थ्रेड द्वारा लॉक प्राप्त करने के दो तरीके हैं। एक है रीएंट्रेंट लॉक (या ReadWriteLock ) और दूसरा है सिंक्रोनाइज़्ड मेथड का इस्तेमाल करना।
जावा 5 से जावा संगामिति पैकेज में ReentrantLock वर्ग प्रदान किया गया है।
यह लॉक इंटरफ़ेस का कार्यान्वयन है और जावा डॉक्स के अनुसार, लॉक इंटरफ़ेस का कार्यान्वयन सिंक्रनाइज़ विधि का उपयोग करके प्राप्त किए जाने की तुलना में अधिक व्यापक संचालन प्रदान करता है।
Sr. नहीं. | कुंजी | ReentrantLock | सिंक्रनाइज़ किया गया |
---|---|---|---|
1 | लॉक प्राप्त करें | रीएंट्रेंट लॉक क्लास थ्रेड द्वारा साझा संसाधन पर लॉक प्राप्त करने के लिए लॉक () विधियाँ प्रदान करता है | लॉक प्राप्त करने के लिए आपको केवल सिंक्रनाइज़ कीवर्ड लिखना होगा |
2 | रिलीज़ लॉक | लॉक जारी करने के लिए, प्रोग्रामर को अनलॉक () विधि को कॉल करना होगा | यह परोक्ष रूप से किया जाता है |
3 | बाधित करने की क्षमता | lockInterruptibility () विधि का उपयोग थ्रेड को बाधित करने के लिए किया जा सकता है | थ्रेड को बाधित करने का कोई तरीका नहीं है |
4 | निष्पक्षता | इस वर्ग के निर्माता के पास निष्पक्षता पैरामीटर है। यदि यह सत्य पर सेट है, तो सबसे लंबे समय तक प्रतीक्षा करने के लिए पहुँच प्रदान करने के पक्ष में है * धागा | लॉक किसी विशेष एक्सेस ऑर्डर की गारंटी नहीं देता है |
5 | लॉक रिलीज़ ऑर्डर | लॉक किसी भी क्रम में जारी किया जा सकता है | ताला उसी क्रम में जारी किया जाना चाहिए जिस क्रम में उन्हें प्राप्त किया गया था |
ReentrantLock का उदाहरण
public class ReentrantLockExample implements Runnable{ private Lock lock=new ReentrantLock(); @Override public void run() { try { lock.lock() //Lock some resource } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
सिंक्रनाइज़्ड लॉक का उदाहरण
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (resource) { //Lock some resource } } }