Да, будет (для любого синхронизированного блока / функции).
Я думал над этим вопросом пару дней для себя (на самом деле в котлине). Я наконец нашел хорошее объяснение и хочу им поделиться:
Блокировка уровня класса предотвращает вход нескольких потоков в синхронизированный блок в любом из всех доступных экземпляров класса во время выполнения. Это означает, что если во время выполнения имеется 100 экземпляров DemoClass, то только один поток сможет выполнять demoMethod () в любом из экземпляров за раз, а все остальные экземпляры будут заблокированы для других потоков.
Блокировка уровня класса всегда должна выполняться, чтобы сделать статические данные потокобезопасными. Как мы знаем, ключевое слово static связывает данные методов с уровнем класса, поэтому используйте блокировку статических полей или методов, чтобы сделать это на уровне класса.
Плюс заметить, почему .class . Это просто потому, что .class
это эквивалентно любой статической переменной класса, подобного:
private final static Object lock = new Object();
где имя переменной блокировки - это класс, а тип - Class <T>
Подробнее:
https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/