У меня небольшая путаница. Если статический экземпляр (пример одиночного экземпляра) обращается к статическому методу. Приобретается ли блокировка класса или блокировка экземпляра?
Class C{
public static cInstance = new C(); // suppose this.Kindle ignore the singleton pattern here
private c(){}
public static synchronized m1(){
}
public static synchronized m2(){
}
public synchronized m3(){ //nonstatic
}
}
Thread1 -> C.cInstance.m1()
Thread2--> C.cInstance.m2()
Thread3 --> C.cInstance.m3()
Насколько я понимаю, m1 и m2 должны получить блокировку класса. Thread2 будет ждать, пока Thread1 освободит блокировку класса. Thread3 будет успешно работать, так как получил блокировку экземпляра.
Пожалуйста, дайте мне знать, правда ли это.