Существует какая-то странная вещь. Когда я вхожу в синхронизированный блок, я пытаюсь напечатать имя Thread.After заявления печати, я делаю паузу паузы в 100000 секунд.Как два потока могут одновременно войти в синхронизированный блок?
@Override
public int getNextAvailableVm() {
synchronized(this) {
System.out.println(Thread.currentThread().getName());
try {Thread.sleep(100000000);}catch(Exception exc){}
String dataCenter = dcc.getDataCenterName();
int totalVMs = Temp_Algo_Static_Var.vmCountMap.get(dataCenter);
AlgoHelper ah = (AlgoHelper)Temp_Algo_Static_Var.map.get(dataCenter);
.
.
.
}
}
Но по мере того как этот метод запущен, выдается имя из 2 потоков.
Thread-11
Thread-13
, и после этого происходит длительная пауза. Почему это ? Как два потока могут войти в синхронизированный блок, когда первый поток еще не покинул блок?
Вы действительно вызываете 'getNextAvailableVm()' на том же самом объекте? – rocketboy
Вы уверены, что ваш сон не прерывается? (напечатать что-нибудь в блоке исключений) – njzk2
@ njzk2 ничего не печатается из блока исключений –