Czym różnią się synchronizowane metody instancji i statyczne synchronizowane metody w Java?
sobes.tech AI
Odpowiedź od AI
W Javie istnieją dwa typy metod synchronizowanych: synchronizowane metody instancji i synchronizowane metody statyczne. Główna różnica polega na tym, na jakim obiekcie następuje blokada:
-
Synchronizowana metoda instancji (
synchronizedbezstatic): Blokada odbywa się na obiekcie (this), do którego należy metoda. Oznacza to, że jeśli masz kilka instancji klasy, każda z nich ma własną blokadę. -
Synchronizowana metoda statyczna (
static synchronized): Blokada odbywa się na obiekcie klasy — obiekcieClass, który reprezentuje samą klasę. W związku z tym blokada jest wspólna dla wszystkich instancji klasy.
Przykład:
public class Example {
public synchronized void instanceMethod() {
// blokuje this
}
public static synchronized void staticMethod() {
// blokuje Example.class
}
}
Oznacza to, że dwa wątki nie mogą jednocześnie wykonać tego samego synchronizowanego metody instancji tego samego obiektu, ale mogą wykonywać różne synchronizowane metody różnych obiektów tej klasy.
Jednocześnie, statyczna synchronizowana metoda blokuje całą klasę, więc w jednym momencie tylko jeden wątek może wykonywać dowolną statyczną synchronizowaną metodę tej klasy, niezależnie od instancji.