Означает ли это, что любой нить независимо от объекта, который он получает, не будет мешать другим Thread, выполняющемуся в Synchronized static method. Даже если мы вызываем с class_name.static_Method.Статический синхронизированный метод обеспечивает блокировку уровня класса. Что означает блокировка уровня класса?
Ex- If we have two thread :
public class Test implements Runnable {
public synchronized static testMethod(){}
public void run(){ testMethod(); }
public static void main(String[] args) {
Test obj1=new Test();
Test obj2=new Test();
Thread t1=new Thread(obj1);
Thread t2=new Thread(obj2);
t1.start(); // thread on object obj1
t2.start(); // Thread on object obj2
Test.testMethod(); // main thread
}
}
Если Thread t1 входит статический метод, то t2 и основной поток не будет входить метод, даже если оба имеют другой объект. Исправьте меня, если я ошибаюсь.
Означает ли это, что если поток t1 входит в статический синхронизированный блок, тогда t1 получит две блокировки для объекта obj1 и второй для объекта класса. – Nizam
Что означает Class.class? Можем ли мы написать это вместо Test.class. – Nizam
Нет .. нет необходимости приобретать блокировку объекта, в этом случае 't1' будет только блокировать объект класса. Поскольку для каждого класса существует только один объект класса, когда 't1' выполняет метод« статический синхронизированный », никакой другой поток не будет разрешен (взаимное исключение) – sanbhat