如果我在两个方法中使用同步(this),另一个调用另一个方法,我会陷入死锁状态,还是会工作,因为线程已经拥有锁定了?Java对象锁定:调用其他方法时发生死锁?
图片下面的类:
public class Test {
public void foo() {
synchronize(this) {
bar();
}
}
public void bar() {
synchronize(this) {
// do something
}
}
}
正如你所看到的,有两种方法foo和酒吧,这既要靠同步。当调用foo()时,会在(this)上获得一个锁。会禁止在被foo调用时执行相同的操作(从而导致死锁),还是会意识到锁已经被同一个线程获取?
希望我的解释是多还是不太清楚;-)
为什么你对此做同步?你班上还有其他方法吗?您可以在方法上使用synchornized作为关键字。 –
科林,我创建了一个内部处理缓存项目过期的缓存,通过使用两个映射,一个用于数据,另一个用于相应的过期时间戳。因此,既不用同步方法也不用同步地图就可以完成这项工作,因为这两个地图都是由许多方法操纵的,并且需要随时同步。 – usimon