Ինչպես են տարբերվում 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
}
}
Սա նշանակում է, որ երկու հոսքերը չեն կարող միաժամանակ կատարել նույն օբյեկտի սինխրոնիզացված մեթոդը, բայց կարող են կատարել տարբեր օբյեկտների տարբեր մեթոդներ:
Նույն ժամանակ, ստատիկ սինխրոնիզացված մեթոդը փակվում է ամբողջ դասը, այնպես որ, միաժամանակ միայն մեկ հոսք կարող է կատարել այս դասի ցանկացած ստատիկ սինխրոնիզացված մեթոդ, անկախ օրինակներից։