Tak, będzie (na każdym zsynchronizowanym bloku / funkcji).
Nad tym pytaniem zastanawiałem się dla siebie przez kilka dni (właściwie w Kotlinie). W końcu znalazłem dobre wyjaśnienie i chcę się nim podzielić:
Blokada na poziomie klasy zapobiega wchodzeniu wielu wątków w zsynchronizowanym bloku we wszystkich dostępnych wystąpieniach klasy w czasie wykonywania. Oznacza to, że jeśli w czasie wykonywania jest 100 wystąpień DemoClass, tylko jeden wątek będzie mógł wykonać demoMethod () w dowolnej instancji na raz, a wszystkie inne wystąpienia zostaną zablokowane dla innych wątków.
Blokowanie na poziomie klasy powinno być zawsze wykonywane, aby zapewnić bezpieczeństwo wątków danych statycznych. Ponieważ wiemy, że statyczne słowo kluczowe kojarzy dane metod z poziomem klasy, użyj blokowania w statycznych polach lub metodach, aby zrobić to na poziomie klasy.
Dodatkowo warto zauważyć, dlaczego .class . Dzieje się tak dlatego, że .class
jest odpowiednikiem dowolnej zmiennej statycznej klasy podobnej do:
private final static Object lock = new Object();
gdzie nazwa zmiennej blokady to class, a typ to Class <T>
Czytaj więcej:
https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/