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