何か変なことが起きています。同期ブロックに入ると、スレッドの名前を出力しようとします。出力ステートメントの後、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
この後、長い一時停止が発生します。何故ですか ?最初のスレッドがまだブロックを離れていないときに、2 つのスレッドが同期ブロックに入るにはどうすればよいでしょうか?