JavaRush /جاوا بلاگ /Random-UR /تھریڈ سنکرونائزیشن، آبجیکٹ لاکنگ اور کلاس لاکنگ
CynepHy6
سطح
Великий Новгород

تھریڈ سنکرونائزیشن، آبجیکٹ لاکنگ اور کلاس لاکنگ

گروپ میں شائع ہوا۔
تھریڈ سنکرونائزیشن، آبجیکٹ لاکنگ اور کلاس لاکنگ - 1مطابقت پذیری سے مراد ملٹی تھریڈنگ ہے۔ کوڈ کے ایک مطابقت پذیر بلاک کو ایک وقت میں صرف ایک تھریڈ کے ذریعے عمل میں لایا جا سکتا ہے۔ جاوا عملدرآمد کے لیے متعدد تھریڈز کو سپورٹ کرتا ہے۔ اس کے نتیجے میں دو یا زیادہ تھریڈز ایک ہی فیلڈ یا آبجیکٹ تک رسائی حاصل کر سکتے ہیں۔ مطابقت پذیری ایک ایسا عمل ہے جو پروگرام میں تمام متوازی دھاگوں کو ہم آہنگی سے چلانے کی اجازت دیتا ہے۔ ہم وقت سازی مشترکہ میموری تک متضاد رسائی کی وجہ سے میموری کی مستقل مزاجی کی خرابیوں سے بچتی ہے۔ جب کسی طریقہ کو مطابقت پذیر قرار دیا جاتا ہے، تو تھریڈ میں اس چیز کے لیے ایک مانیٹر ہوتا ہے جس کا طریقہ کار انجام دیا جا رہا ہے۔ اگر کوئی دوسرا تھریڈ مطابقت پذیر طریقہ پر عمل کر رہا ہے تو، آپ کا تھریڈ اس وقت تک بلاک ہو جائے گا جب تک کہ دوسرا تھریڈ مانیٹر کو جاری نہیں کرتا۔ جاوا میں ایک محفوظ لفظ کا استعمال کرتے ہوئے مطابقت پذیری حاصل کی جاتی ہے synchronized۔ آپ اسے مطابقت پذیر طریقوں یا بلاکس کی وضاحت کرکے اپنی کلاسوں میں استعمال کرسکتے ہیں۔ synchronizedآپ کلاس کی تعریف میں متغیرات یا صفات میں استعمال نہیں کر پائیں گے ۔

آبجیکٹ لیول لاکنگ

یہ ایک غیر جامد طریقہ یا کوڈ کے غیر جامد بلاک کو مطابقت پذیر کرنے کا طریقہ کار ہے جیسے کہ صرف ایک تھریڈ کسی کلاس کی دی گئی مثال پر دیئے گئے بلاک یا طریقہ کو انجام دے سکتا ہے۔ جب بھی آپ کو مثال کی سطح کے ڈیٹا تھریڈ کو محفوظ بنانے کی ضرورت ہو تو یہ کرنا چاہیے۔ مثال:
public class DemoClass{
    public synchronized void demoMethod(){}
}
یا
public class DemoClass{
    public void demoMethod(){
        synchronized (this)        {
            //other thread safe code
        }
    }
}
یا
public class DemoClass{
    private final Object lock = new Object();
    public void demoMethod(){
        synchronized (lock)        {
            //other thread safe code
        }
    }
}

کلاس لیول لاکنگ

کلاس کی کسی بھی دستیاب مثالوں میں عملدرآمد کے دوران متعدد تھریڈز کو مطابقت پذیر بلاک میں داخل ہونے سے روکتا ہے۔ اس کا مطلب یہ ہے کہ اگر پروگرام پر عمل درآمد کے دوران کلاس کی 100 مثالیں ہیں ، تو اس وقت صرف ایک تھریڈ کسی بھی صورت میں DemoClassعمل درآمد کر سکے گا ، اور باقی تمام کیسز کو دوسرے تھریڈز کے لیے بلاک کر دیا جائے گا۔ demoMethod()جب آپ کو جامد ڈیٹا تھریڈ کو محفوظ بنانے کی ضرورت ہو تو یہ ضروری ہے۔
public class DemoClass{
    public synchronized static void demoMethod(){}
}
یا
public class DemoClass{
    public void demoMethod(){
        synchronized (DemoClass.class)        {
            //other thread safe code
        }
    }
}
یا
public class DemoClass
{
    private final static Object lock = new Object();
    public void demoMethod(){
        synchronized (lock)        {
            //other thread safe code
        }
    }
}

کچھ اہم نوٹس

  1. جاوا میں مطابقت پذیری اس بات کو یقینی بناتی ہے کہ کوئی بھی دو تھریڈز ایک ہی وقت میں یا متوازی طور پر مطابقت پذیر طریقہ پر عمل درآمد نہیں کر سکتے ہیں۔

  2. synchronizedصرف طریقوں اور کوڈ بلاکس کے ساتھ استعمال کیا جا سکتا ہے۔ یہ طریقے یا بلاکس جامد یا غیر جامد ہو سکتے ہیں۔

  3. جب بھی کوئی دھاگہ مطابقت پذیر طریقہ میں داخل ہوتا ہے یا بلاک کرتا ہے تو یہ ایک لاک حاصل کرتا ہے اور جب بھی کوئی تھریڈ مطابقت پذیر طریقہ سے باہر نکلتا ہے یا JVM کو بلاک کرتا ہے تو تالا جاری کرتا ہے۔ تالے کو جاری کیا جاتا ہے یہاں تک کہ اگر دھاگہ کسی غلطی یا استثناء کی وجہ سے تکمیل کے بعد مطابقت پذیر طریقہ کو چھوڑ دیتا ہے۔

  4. synchronizedJava میں ، اس کا مطلب ہے کہ اگر ایک مطابقت پذیر طریقہ کسی دوسرے ہم وقت ساز طریقہ کو کال کرتا ہے جس کے لیے ایک ہی تالا کی ضرورت ہوتی ہے، تو موجودہ دھاگہ جو تالا رکھتا ہے وہ تالا حاصل کیے بغیر اس طریقہ میں داخل ہوسکتا ہے۔

  5. Синхронизация в Java будет бросать NullPointerException если an object используемый в синхронизированном блоке null. Например, в вышеприведенном примере codeа, если замок инициализируется How null, синхронизированный (lock) бросит NullPointerException.

  6. Синхронизированные методы в Java вносят дополнительные затраты на производительность вашего applications. Так что используйте синхронизацию, когда она абсолютно необходима. Кроме того, рассмотрите вопрос об использовании синхронизированных блоков codeа для синхронизации только критических секций codeа.

  7. Вполне возможно, что и статический и не статический синхронизированные методы могут работать одновременно or параллельно, потому что они захватывают замок на другой an object.

  8. В соответствии со спецификацией языка вы не можете использовать synchronized в конструкторе это приведет к ошибке компиляции.

  9. Не синхронизируйте по не финальному (no final) полю, потому что link, на не финальное поле может измениться в любое время, а затем другой поток может получить синхронизацию на разных an objectх и уже не будет ниHowой синхронизации вообще. Лучше всего использовать класс String, который уже неизменяемый и финальный.

Удачи в обучении!! Оригинал: Object level lock vs Class level lock in Java
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION