Oui, il le fera (sur tout bloc/fonction synchronisé).
Je me pose cette question depuis quelques jours pour moi-même (en fait en kotlin). J'ai finalement trouvé une bonne explication et je veux la partager :
Le verrouillage au niveau de la classe empêche plusieurs threads d'entrer dans un bloc synchronisé dans n'importe laquelle de toutes les instances disponibles de la classe au moment de l'exécution. Cela signifie que si, au moment de l'exécution, il existe 100 instances de DemoClass, un seul thread sera en mesure d'exécuter demoMethod() dans l'une des instances à la fois, et toutes les autres instances seront verrouillées pour les autres threads.
Le verrouillage au niveau de la classe doit toujours être effectué pour rendre les données statiques thread safe. Comme nous savons que le mot-clé static associe les données des méthodes au niveau de la classe, il faut donc utiliser le verrouillage au niveau des champs statiques ou des méthodes pour le faire au niveau de la classe.
Plus pour remarquer pourquoi .classe . C'est juste parce que .class
est équivalent à toute variable statique de classe similaire à :
private final static Object lock = new Object();
où le nom de la variable de verrouillage est classe et le type est Classe<T>
Lire la suite : https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/