Sobes.tech
Junior — Middle

Java'da sinxronlashtirilgan obyekt usullari va statik sinxronlashtirilgan usullar qanday farq qiladi?

sobes.tech AI

AIdan javob

Java'da sinxronlashtirilgan ikki turdagi metodlar mavjud: sinxronlashtirilgan obyekt metodlari va statik sinxronlashtirilgan metodlar. Asosiy farq, qaysi obyektda bloklash amalga oshirilayotganidadir:

  • Obyekt sinxronlashtirilgan metod (synchronized without static): Bloklash, metodga tegishli obyekt (this) ustida amalga oshiriladi. Bu shuni anglatadiki, agar sizda bir nechta sinf nusxalari bo'lsa, har biri o'zining bloklashiga ega.

  • Statik sinxronlashtirilgan metod (static synchronized): Bloklash, sinf obyekti — Class obyekti ustida amalga oshiriladi, bu obyekti o'z sinfini ifodalaydi. Shunday qilib, bloklash barcha sinf nusxalari uchun umumiydir.

Misol:

public class Example {
    public synchronized void instanceMethod() {
        // this bloklanadi
    }

    public static synchronized void staticMethod() {
        // Example.class bloklanadi
    }
}

Bu shuni anglatadiki, ikki oqim bir vaqtning o'zida bir xil obyektning sinxronlashtirilgan metodini bajarolmaydi, lekin ular bu sinfning turli obyektlarining sinxronlashtirilgan metodlarini bajarishlari mumkin.

Shuningdek, statik sinxronlashtirilgan metod butun sinfni bloklaydi, shuning uchun bir vaqtning o'zida faqat bitta oqim bu sinfning har qanday statik sinxronlashtirilgan metodini bajarishi mumkin, obyektlardan qat'i nazar.