Sí, lo hará (en cualquier función / bloque sincronizado).
Estuve preguntándome sobre esta pregunta durante un par de días para mí (en realidad, en kotlin). Finalmente encontré una buena explicación y quiero compartirla:
El bloqueo de nivel de clase evita que varios subprocesos entren en un bloque sincronizado en cualquiera de todas las instancias disponibles de la clase en tiempo de ejecución. Esto significa que si en tiempo de ejecución hay 100 instancias de DemoClass, entonces solo un hilo podrá ejecutar demoMethod () en cualquiera de las instancias a la vez, y todas las demás instancias se bloquearán para otros hilos.
El bloqueo de nivel de clase siempre debe realizarse para que los subprocesos de datos estáticos sean seguros. Como sabemos que la palabra clave estática asocia datos de métodos a nivel de clase, utilice el bloqueo en campos o métodos estáticos para hacerlo a nivel de clase.
Además de notar por qué .class . Es solo porque .class
es equivalente a cualquier variable estática de clase similar a:
private final static Object lock = new Object();
donde el nombre de la variable de bloqueo es clase y el tipo es Clase <T>
Leer más:
https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/