Suh*_*pta 2 java multithreading synchronized
发生了一些奇怪的事情。当我进入同步块时,我尝试打印线程的名称。在打印语句之后,我暂停了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);
.
.
.
}
}
Run Code Online (Sandbox Code Playgroud)
但是在运行此方法时,将打印两个线程的名称。
Thread-11
Thread-13
Run Code Online (Sandbox Code Playgroud)
在此之后,会出现长时间的停顿。这是为什么 ?当第一个线程尚未离开同步块时,两个线程如何进入同步块?
如果两个线程针对同一个对象运行,则不应发生这种情况。
因此,我建议您为每个线程创建一个新对象,或者至少某些线程在不同的对象上运行。
如果你想多个对象,那么你应该不会用synchronized(this),你应该创建一个static final Object以synchronize上。请不要同步,this.getClass()因为这样会中断。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |