Sobes.tech
Junior — Middle

Ինչպես են տարբերվում Java-ում ինստանսային սինխրոնիզացված մեթոդներն ու ստատիկ սինխրոնիզացված մեթոդները?

sobes.tech AI

Պատասխան AI-ից

Java-յում երկու տեսակի սինխրոնիզացված մեթոդներ կան: Սինխրոնիզացված մեթոդների հիմնական տարբերությունը այն է, թե որ օբյեկտի վրա է կատարվում փակումը:

  • Օբյեկտի սինխրոնիզացված մեթոդ (synchronized առանց static): Փակումը կատարվում է այն օբյեկտի վրա (this), որի վրա է պատկանում մեթոդը: Սա նշանակում է, որ եթե ունեք մի քանի օրինակներ այդ դասի, յուրաքանչյուրի համար ունի իր փակումը:

  • Ստատիկ սինխրոնիզացված մեթոդ (static synchronized): Փակումը կատարվում է դասի օբյեկտի վրա — Class օբյեկտի, որը ներկայացնում է հենց դասը: Այսպիսով, փակումը ընդհանուր է բոլոր օրինակների համար:

Օրինակ:

public class Example {
    public synchronized void instanceMethod() {
        // փակվում է this
    }

    public static synchronized void staticMethod() {
        // փակվում է Example.class
    }
}

Սա նշանակում է, որ երկու հոսքերը չեն կարող միաժամանակ կատարել նույն օբյեկտի սինխրոնիզացված մեթոդը, բայց կարող են կատարել տարբեր օբյեկտների տարբեր մեթոդներ:

Նույն ժամանակ, ստատիկ սինխրոնիզացված մեթոդը փակվում է ամբողջ դասը, այնպես որ, միաժամանակ միայն մեկ հոսք կարող է կատարել այս դասի ցանկացած ստատիկ սինխրոնիզացված մեթոդ, անկախ օրինակներից։