JavaRush /جاوا بلاگ /Random-SD /ٿريڊ سنڪرونائيزيشن، آبجیکٹ لاڪنگ ۽ ڪلاس لاڪنگ
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