Synchronizing Methods and Blocks Java In Hindi

Synchronizing Methods and Blocks Java In Hindi

जावा प्रोग्रामिंग लैंग्वेज में मल्टीथ्रेडिंग थ्रेड टास्क में सिंक्रोनाइज़ेशन मेथड का यूज़ किसी प्रोग्राम में शेयर्ड रिसोर्स के फुल एक्सेस को कंट्रोल या मैनेज करने में किया जाता है. जब जावा यूजर एक सिंगल प्रोग्राम में एक ही रियल टाइम में एक साथ मल्टीप्ल थ्रेड टास्क  को एक्सेक्यूट या रन कर रहे है।

Synchronizing Methods and Blocks Java In Hindi

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

जावा में थ्रेड टास्क सिंक्रोनाइज़ेशन फंक्शन अचीव करने के लिए जावा इसके यूजर को सिंक्रोनाइज़्ड कीवर्ड प्रोवाइड करता है।

Why do we need synchronization methods in a Java program?

यहाँ माना की यूजर के पास दो थ्रेड टास्क एक ही बैंक अकाउंट डाटा इन्फो को एक्सेस कर रहे हैं।

class User_Account {

int Final_balance = 8789;

void withdrawals(int total_amount) {

Final_balance = Final_balance – total_amount;

}

}

यहाँ इस कंडीशन में यूजर अकाउंट डिफाइन दो थ्रेड टास्क एक ही समय पर पैसे विथड्रॉ करने की अप्लाई या कोशिश करते हैं. तो ऐसी कंडीशन में यूजर अकाउंट में दोनों थ्रेड टास्क किसी भी सिस्टम अपडेट के पूरा होने से पहले वही यूजर अकाउंट से पुराना डिपाजिट अमाउंट बैलेंस इन्फो को डिस्प्ले कर सकते हैं।

ऐसी कंडीशन में कई बार फाल्स रिज़ल्ट डिस्प्ले हो सकता है।

ऐसी कंडीशन में सिंक्रोनाइज़ेशन मेथड यह फिक्स करता है कि मौजूदा सिस्टम में एक समय में सिर्फ़ एक ही थ्रेड टास्क एक ही लॉक के लिए क्रिटिकल सेक्शन को एग्जीक्यूट कर सके।

Synchronized Method in Java.

जावा प्रोग्रामिंग लैंग्वेज में सिंक्रोनाइज़्ड मेथड एक ऐसा यूजर डिफाइन कस्टम डिक्लेअर मेथड है, जिसे थ्रेड प्रोग्राम में एक सिंक्रोनाइज़्ड कीवर्ड डिक्लेअर कर यूज़ किया जाता है।

Synchronized Method Syntax.

synchronized void methodName() {

// Here we create a user-defined critical section.

}

Example of a synchronized method.

class Tester {

private int count_Value = 0;

synchronized void increase() {

count_Value++;

}

int getcount_Value() {

return count_Value;

}

}

यहाँ इस एक्साम्प्ल में यदि एक ही Tester ऑब्जेक्ट पर कई थ्रेड टास्क increase() फंक्शन मेथड को कॉल करते हैं. तो सिंक्रोनाइज़ेशन मेथड उन्हें उस सिंक्रोनाइज़्ड मेथड में एक साथ एंटर करने से ब्लॉक करता है।

How a synchronized method works in a thread.

Tester t = new Tester();

यहाँ इसमें एक ही इंस्टेंस synchronized मेथड के लिए.

synchronized void increase()

यहाँ लॉक ऑब्जेक्ट t से कनेक्टेड होता है।

Conceptually, the method concept.

थ्रेड टास्क 1 → थ्रेड 1 ऑब्जेक्ट लॉक पाता है → increase() फंक्शन एग्जीक्यूट करता है

|

v

अंत में ऑब्जेक्ट लॉक को रिलीज़ करता है

थ्रेड टास्क 2 → थ्रेड 2 ऑब्जेक्ट लॉक पाता है → increase() फंक्शन एग्जीक्यूट करता है

ऐसी कंडीशन में, एक यूजर डिफाइन प्रोग्राम थ्रेड फर्स्ट टास्क को इस प्रोसेस में वेट करना होगा। जबकि सेकंड थ्रेड टास्क उसी ऑब्जेक्ट का मॉनिटर लॉक वैल्यू को होल्ड करता है।

Synchronized Block Concept in Java

कभी-कभी हम पूरे मेथड को सिंक्रोनाइज़ नहीं करना चाहते।

इसके बजाय, हम मेथड के सिर्फ़ एक खास हिस्से को सिंक्रोनाइज़ करना चाह सकते हैं। ऐसे में, हम सिंक्रोनाइज़्ड ब्लॉक का यूज़ करते हैं।

Synchronized Block method syntax.

synchronized(object) {

//Here we create a user-defined thread task critical section.

}

Example of a Synchronized Block method.

class Tester {

private int count_value = 0;

void increase() {

synchronized(this) {

count_value++;

}

}

int getcount_value() {

return count_value;

}

}

Here, in this example, only

count_value++;

यहाँ यह एक सिंक्रोनाइज़्ड मेथड है।

इसके अलावा increase() फंक्शन मेथड को इसमें लॉक की ज़रूरत नहीं है।

Explanation of Synchronized Method vs Synchronized Block

#Synchronized java methodSynchronized java block
1.We can use synchronized method with a complete java program methodWe can use it with specific synchronized with a particular block portion or area
2.It used to lock the entire java program thread methodIt locks only a specific section or portion on java thread
3.Synchronized java method is simple to write for userSynchronized java block provides more control then other
4.Synchronized java method may lock more code than its system necessarySynchronized java block can reduce unnecessary thread method or block it from locking
5.Synchronized java method uses the method’s associated with only its secure lockSynchronized java block you explicitly specify the lock object or portion

Example of a synchronized method in a Java thread task.

यहाँ जावा यूजर एक ऑनलाइन टिकट बुकिंग कम्पलीट सिस्टम को डिटेल में एनालाइज कर सकते है।

class TicketBookingSystem {

private int ticket = 1;

synchronized void buyTicket() {

if (book_tickets > 0) {

System.out.println(“Ticket received by “

+ Thread.currentThread().getName());

book_tickets–;

} else {

System.out.println(“No ticket ready to buy”);

}

}

}

यहाँ इस एक्साम्प्ले में दो थ्रेड टास्क एक ही टिकट को बुक करने की कोशिश कर सकते हैं.

public class Main {

public static void main(String[] args) {

TicketBookingSystem tic_booking = new TicketBookingSystem();

Thread th1 = new Thread(() -> tic_booking.bookTicket(), “Buyer First”);

Thread th2 = new Thread(() -> tic_booking.bookTicket(), “Buyer Second”);

th1.start();

th2.start();

}

}

क्योंकि इस एक्साम्प्ल में buyTicket() synchronized थ्रेड टास्क या मेथड है. इस वजह से उस बुकिंग ऑब्जेक्ट के लिए एक समय में केवल एक थ्रेड ही इसे एक्सेक्यूट कर सकता है।

Example of a synchronized block in a Java thread task.

यहाँ माना की हमारे पास किसी यूजर डिफाइन प्रोग्राम थ्रेड टास्क मेथड में कुछ कोड है, जिसमे आपको सिंक्रोनाइज़ेशन अप्लाई करने की ज़रूरत नहीं है।

class Tester {

private int count_value = 0;

void increase() {

System.out.println(“Preparing to increase tester…”);

synchronized (this) {

count_value++;

}

System.out.println(“Tester increment completed.”);

}

}

Critical sections only.

synchronized (this) {

count_value++;

}

यह एक सिक्योर सिंक्रोनाइज़ेशन थ्रेड टास्क मेथड है।

इस मेथड को तब यूज़ किया जाता है, जब यूजर डिफाइन सिंक्रोनाइज़ेशन थ्रेड टास्क मेथड में बहुत सारा यूजर डिफाइन कस्टम कोड होता है. लेकिन जरूरत पड़ने पर उसका सिर्फ़ एक छोटा सा पोरशन ही शेयर्ड डेटा को एक्सेस कर सकता है।

Lock an object in a Java synchronized thread task block.

जावा यूजर एक थ्रेड टास्क ऑब्जेक्ट लॉक के रूप में एक अलग ऑब्जेक्ट का यूज़ कर सकते हैं।

class Sample {

private final Object lock = new Object();

void preview() {

synchronized (lock) {

System.out.println(“Critical thread section define”);

}

}

}

यहां इस एक्साम्प्ल में, थ्रेड ऑब्जेक्ट लॉक का यूज़ मॉनिटर ऑब्जेक्ट के रूप में किया जाता है।

जावा में इस मेथड को तब यूज़ किया जा सकता है, जब जावा यूजर इसमें सिंक्रोनाइज़ेशन को क्लियर आर्डर में कंट्रोल या मैनेज करना चाहते हैं।

Static synchronized method concept in Java threads.

किसी जावा प्रोग्राम में एक स्टैटिक टास्क मेथड को भी जरूरत पड़ने पर सिंक्रोनाइज़ किया जा सकता है।

class Sample {

static synchronized void preview() {

System.out.println(“User define Static synchronized method define”);

}

}

यहाँ इस मेथड में मुख्य अंतर यह है कि एक मौजूदा प्रोग्राम में एक स्टैटिक सिंक्रोनाइज़्ड मेथड क्लास ऑब्जेक्ट को लॉक करता है. किसी एक ऑब्जेक्ट इंस्टेंस को नहीं करता है।

For example.

Sample.class

यहाँ Sample क्लास मेथड इसमें एक लॉक का काम करता है।

Key points about synchronizing methods and blocks.

जावा थ्रेड में सिंक्रोनाइज़्ड मेथड जावा यूजर को एक म्यूचुअल एक्सक्लूज़न कांसेप्ट प्रोवाइड करता है

यह कांसेप्ट मौजूदा प्रोग्राम में फिक्स करता है कि एक समय में सिर्फ़ एक थ्रेड टास्क ही उसी लॉक से सिक्योर कोड को रन कर सके।

Java synchronization is thread task object-specific.

Synchronization is thread task instance.

synchronized void preview()

यहाँ यह मौजूदा थ्रेड ऑब्जेक्ट (this) फंक्शन मेथड को लॉक करता है।

जिसमे दो अलग-अलग थ्रेड टास्क ऑब्जेक्ट के अलग-अलग लॉक डिफाइन होते हैं.

Sample s1 = new Sample();

Sample s2 = new Sample();

यहाँ इस एक्साम्प्ल में s1 के लॉक का यूज़ करने वाला थ्रेड टास्क मेथड, s2 के लॉक का यूज़ करने वाले थ्रेड को ऑटोमैटिकली ब्लॉक नहीं करता है।

Java thread task synchronization also provides memory visibility.

यहाँ इस एक्साम्प्ल में मॉनिटर लॉक रिलीज़ करने से पहले एक थ्रेड द्वारा किए गए किसी भी प्रकार के मॉडिफिकेशन, अन्य थ्रेड को तब डिस्प्ले होते हैं. जब वह टास्क या प्रोसेस में उसी लॉक को सक्सेस्स्फुल्ली अचीव कर लेता है।

Simple difference between the two methods.

Synchronized Java method.

synchronized void preview() {

// In this, a complete user-defined method is kept safe.

}

Synchronized Java block method.

void preview() {

// Normal Java thread program source code

synchronized(this) {

// This is only protected as this section

}

// Normal Java program source code

}

Conclusion of Synchronizing Methods and Blocks with Java.

जावा प्रोग्रामिंग लैंग्वेज में सिंक्रोनाइज़ेशन एक ऐसा मैकेनिज़्म या यूजर डिफाइन थ्रेड टास्क मेथड है, जिसका यूज़ जावा टास्क में कई थ्रेड द्वारा शेयर किए गए उसके रिसोर्स तक एक्सेस को कंट्रोल या मैनेज करने में किया जाता है। यह थ्रेड टास्क में रेस कंडीशन को अवॉयड करता है, और मौजूदा प्रोग्राम में यह फिक्स करता है कि एक मौजूदा टास्क समय में सिर्फ़ एक थ्रेड ही उसी लॉक से सिक्योर सिंक्रोनाइज़्ड सेक्शन को एग्जीक्यूट कर सके। जावा पोग्राम आपको, एक सिंक्रोनाइज़्ड कीवर्ड का यूज़ करके सिंक्रोनाइज़ेशन मेथड प्रोवाइड करता है। जावा प्रोग्राम थ्रेड टास्क के लिए एक सिंक्रोनाइज़ेशन को सिंक्रोनाइज़्ड मेथड या सिंक्रोनाइज़्ड ब्लॉक का यूज़ करके इम्प्लीमेंट या अप्लाई किया जा सकता है। जावा प्रोग्राम में एक सिंक्रोनाइज़्ड मेथड, उस मेथड के एग्जीक्यूशन के लिए उससे जुड़े ऑब्जेक्ट को लॉक करता है. जबकि एक यूजर डिफाइन प्रोग्राम सिंक्रोनाइज़्ड ब्लॉक प्रोग्राम कोड के सिर्फ़ एक स्पेशल पोरशन के सिंक्रोनाइज़ेशन की परमिशन प्रोवाइड करता है, और लॉक पर आपको ज़्यादा कंट्रोल प्रोवाइड करता है।

Synchronizing Methods and Blocks in Brief.

  • Synchronized Java Method → यहाँ जावा प्रोग्राम में कम्पलीट थ्रेड मेथड को लॉक करता है
  • Synchronized Java Block → यहाँ जावा प्रोग्राम में सिर्फ़ एक एसेंशियल इम्पोर्टेन्ट सेक्शन को ही लॉक करता है
  • Purpose of both synchronized Java methods and blocks → ये दोनों जावा प्रोग्राम में थ्रेड सेफ्टी + रेस कंडीशन से प्रोग्राम को सिक्योर करते है.

Leave a Reply