gpt4 book ai didi

java - 两个线程怎么会同时进入synchronized block 呢?

转载 作者:行者123 更新时间:2023-11-30 06:23:00 25 4
gpt4 key购买 nike

发生了一些奇怪的事情。当我进入同步块(synchronized block)时,我尝试打印线程的名称。在打印语句之后,我暂停了 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

在此之后,长时间的停顿发生了。这是为什么 ?当第一个线程还没有离开同步块(synchronized block)时,两个线程怎么会进入同步块(synchronized block)?

最佳答案

如果两个线程针对同一个对象运行,则不应发生这种情况。

因此,我建议为每个线程创建一个新对象,或者至少一些线程在不同的对象上运行。

如果你确实想要多个对象,那么你应该使用synchronized(this),你应该创建一个static final Object同步。请不要在 this.getClass() 上同步,因为它会中断。

关于java - 两个线程怎么会同时进入synchronized block 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com