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

जावा में ऑब्जेक्ट लेवल लॉक बनाम क्लास लेवल लॉक?


दोनों ऑब्जेक्ट लेवल लॉक और कक्षा स्तरीय स्थान k का उपयोग सिंक्रनाइज़ेशन . प्राप्त करने के लिए किया जाता है एक बहु-थ्रेडेड अनुप्रयोग में तंत्र।

ऑब्जेक्ट लेवल लॉक

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

उदाहरण

public class ObjectLevelLockTest implements Runnable {
   @Override
   public void run() {
      objectLock();
   }
   public void objectLock() {
      System.out.println(Thread.currentThread().getName());
      synchronized(this) {
         System.out.println("Synchronized block " + Thread.currentThread().getName());
         System.out.println("Synchronized block " + Thread.currentThread().getName() + " end");
      }
   }
   public static void main(String[] args) {
      ObjectLevelLockTest test1 = new ObjectLevelLockTest();
      Thread t1 = new Thread(test1);
      Thread t2 = new Thread(test1);
      ObjectLevelLockTest test2 = new ObjectLevelLockTest();
      Thread t3 = new Thread(test2);
      t1.setName("t1");
      t2.setName("t2");
      t3.setName("t3");
      t1.start();
      t2.start();
      t3.start();
   }
}

आउटपुट

t1
t2
t3
Synchronized block t1
Synchronized block t3
Synchronized block t1 end
Synchronized block t3 end
Synchronized block t2
Synchronized block t2 end


क्लास लेवल लॉक

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

उदाहरण

public class ClassLevelLockTest implements Runnable {
   @Override
   public void run() {
      classLock();
   }
   public void classLock() {
      System.out.println(Thread.currentThread().getName());
      synchronized(ClassLevelLockTest.class) {
         System.out.println("Synchronized block " + Thread.currentThread().getName());
         System.out.println("Synchronized block " + Thread.currentThread().getName() + " end");
      }
   }
   public static void main(String[] args) {
      ClassLevelLockTest test1 = new ClassLevelLockTest();
      Thread t1 = new Thread(test1);
      Thread t2 = new Thread(test1);
      ClassLevelLockTest test2 = new ClassLevelLockTest();
      Thread t3 = new Thread(test2);
      t1.setName("t1");
      t2.setName("t2");
      t3.setName("t3");
      t1.start();
      t2.start();
      t3.start();
   }
}

आउटपुट

t3
t2
t1
Synchronized block t3
Synchronized block t3 end
Synchronized block t2
Synchronized block t2 end
Synchronized block t1
Synchronized block t1 end

  1. जावा में स्विंगवर्कर वर्ग का क्या महत्व है?

    एक स्विंगवर्कर वर्ग हमें एक एसिंक्रोनस . करने में सक्षम बनाता है कार्य वर्कर थ्रेड में (जैसे कि लंबे समय तक चलने वाला कार्य) फिर इवेंट डिस्पैच थ्रेड (EDT से स्विंग घटकों को अपडेट करें। ) कार्य परिणामों के आधार पर। इसे Java 1.6 संस्करण . में पेश किया गया था स्विंगवर्कर वर्ग द java.swing.SwingWor

  1. जावा में स्विंग यूटिलिटीज क्लास का क्या महत्व है?

    जावा में, स्क्रीन पर प्रदर्शित होने वाले स्विंग घटकों के बाद, उन्हें केवल एक थ्रेड द्वारा संचालित किया जा सकता है जिसे इवेंट हैंडलिंग थ्रेड कहा जाता है . हम अपना कोड एक अलग ब्लॉक में लिख सकते हैं और इस ब्लॉक को ईवेंट . का संदर्भ दे सकते हैं हैंडलिंग धागा . स्विंग यूटिलिटीज कक्षा में दो महत्वपूर्ण

  1. जावा में सिंगल लेवल इनहेरिटेंस

    सिंगल लेवल इनहेरिटेंस - एक क्लास को सिंगल क्लास से गुण विरासत में मिलते हैं। उदाहरण के लिए, क्लास बी को क्लास ए विरासत में मिली है। उदाहरण class Shape {    public void display() {       System.out.println("Inside display");    } } class Rectangle extends