Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में ReentrantLock और Synchronized के बीच अंतर

शेयर्ड रिसोर्स पर मल्टीपल थ्रेड्स द्वारा लॉक प्राप्त करने के दो तरीके हैं: एक है ReentrantLock (या ReadWriteLock) और दूसरा है Synchronized मेथड का उपयोग करके।

ReentrantLock क्लास Java 5 से जावा कन्करेंसी पैकेज में प्रदान की गई है। यह Lock इंटरफेस का इम्प्लीमेंटेशन है और जावा डॉक्स के अनुसार, Lock इंटरफेस का इम्प्लीमेंटेशन synchronized मेथड की तुलना में अधिक व्यापक ऑपरेशन प्रदान करता है।

क्र.सं. मुख्य बिंदु ReentrantLock Synchronized
1 लॉक प्राप्त करना ReentrantLock क्लास थ्रेड द्वारा शेयर्ड रिसोर्स पर लॉक पाने के लिए lock() मेथड प्रदान करती है लॉक प्राप्त करने के लिए बस synchronized कीवर्ड लिखना होता है
2 लॉक रिलीज करना लॉक रिलीज करने के लिए प्रोग्रामर को unlock() मेथड कॉल करना पड़ता है यह इम्प्लिसिटली (अंतर्निहित रूप से) किया जाता है
3 इंटरप्ट करने की क्षमता थ्रेड को इंटरप्ट करने के लिए lockInterruptibly() मेथड का उपयोग किया जा सकता है थ्रेड को इंटरप्ट करने का कोई तरीका नहीं है
4 फेयरनेस इस क्लास के कंस्ट्रक्टर में फेयरनेस पैरामीटर होता है। यदि इसे true पर सेट किया जाता है तो लॉक सबसे लंबे समय से वेट कर रहे थ्रेड को एक्सेस देने का पक्ष लेता है लॉक किसी विशेष एक्सेस ऑर्डर की गारंटी नहीं देता
5 लॉक रिलीज ऑर्डर लॉक को किसी भी ऑर्डर में रिलीज किया जा सकता है लॉक को उसी ऑर्डर में रिलीज किया जाना चाहिए जिस क्रम में वे प्राप्त किए गए थे

ReentrantLock का उदाहरण

public class ReentrantLockExample implements Runnable {
    private Lock lock = new ReentrantLock();
    
    @Override
    public void run() {
        try {
            lock.lock();
            // शेयर्ड रिसोर्स को लॉक करें
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}

Synchronized का उदाहरण

public class SynchronizedLockExample implements Runnable {
    @Override
    public void run() {
        synchronized (resource) {
            // शेयर्ड रिसोर्स को लॉक करें
        }
    }
}

कब किसका उपयोग करें?

  • Synchronized: सरल सिंक्रोनाइजेशन के लिए, जब फेयरनेस या इंटरप्टिबिलिटी की आवश्यकता न हो
  • ReentrantLock: जब एडवांस्ड फीचर्स चाहिए जैसे फेयरनेस, टाइमआउट, इंटरप्टिबिलिटी, या मल्टीपल कंडीशन वेरिएबल्स
  1. - जावा में ConcurrentHashMap और Synchronized HashMap के बीच अंतर

    ConcurrentHashMap एक क्लास है जिसे JDK 1.5 में पेश किया गया था। ConcurrentHashMap मैप में जोड़ते या अपडेट करते समय केवल बकेट लेवल पर लॉक लगाता है जिसे फ्रैगमेंट कहा जाता है। इसलिए, ConcurrentHashMap मैप पर कनकरेंट रीड और राइट ऑपरेशन की अनुमति देता है। Synchronized HashMap (Collections.synchronizedM

  1. - जावा में Iterator और Enumeration के बीच अंतर

    Iterator और Enumeration दोनों कलेक्शन से एलिमेंट्स को ट्रैवर्स और एक्सेस करने के लिए कर्सर हैं। वे दोनों कलेक्शन फ्रेमवर्क से संबंधित हैं। Enumeration JDK 1.0 में जोड़ा गया था और Iterator JDK 1.2 वर्जन में कलेक्शन फ्रेमवर्क में जोड़ा गया। Enumeration कलेक्शन में स्ट्रक्चरल चेंज नहीं कर सकता क्योंकि

  1. - Java में ArrayList और HashSet के बीच अंतर

    HashSet और ArrayList दोनों Java कलेक्शन फ्रेमवर्क के सबसे महत्वपूर्ण क्लासेस में से कुछ हैं।ArrayList और HashSet के बीच महत्वपूर्ण अंतर निम्नलिखित हैं।क्रमांकमुख्य बिंदुArrayListHashSet1कार्यान्वयनArrayList लिस्ट इंटरफेस का कार्यान्वयन है।दूसरी ओर HashSet सेट इंटरफेस का कार्यान्वयन है।2आंतरिक कार्या