Чтобы ответить на ваш вопрос: это блокировка на уровне класса? Ответ: хм, нет :)
Здесь разные потоки могут синхронизировать c на разных объектах, поскольку блокировка передается как параметр метода.
Пара примеров:
public class DemoClass
{
//Method is static
public synchronized static void demoMethod(){
}
}
or
public class DemoClass
{
public void demoMethod()
{
//Acquire lock on .class reference
synchronized (DemoClass.class)
{
//other thread safe code
}
}
}
or
public class DemoClass
{
private final static Object lock = new Object();
public void demoMethod()
{
//Lock object is static
synchronized (lock)
{
//other thread safe code
}
}
}
Синхронизация увеличивает нагрузку на вашу программу. В веб-приложении это одна из функций, которые за вас берет на себя контейнер приложения. Несмотря на то, что вы можете охватить собственные потоки в веб-приложении, это не рекомендуется.