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-ს
}
}
ეს ნიშნავს, რომ ორი ნაკადი ერთდროულად ვერ შეასრულებს ერთსა და იმავე ინსტანციის სინქრონიზებულ მეთოდს, მაგრამ შეუძლიათ სხვადასხვა ობიექტის სხვადასხვა სინქრონიზებულ მეთოდს შეასრულონ.
ამასთან, სტატიკური სინქრონიზებული მეთოდი ბლოკავს მთელ კლასს, ამიტომ ერთ დროს მხოლოდ ერთი ნაკადი შეუძლია შეასრულოს ამ კლასის ნებისმიერი სტატიკური სინქრონიზებული მეთოდი, ობიექტებისგან დამოუკიდებლად.