如果我在两种方法中使用 synchronize(this) 并且一种调用另一种方法,我会陷入死锁情况还是会因为线程已经拥有锁而工作?
想象一下下面的班级:
public class Test {
public void foo() {
synchronize(this) {
bar();
}
}
public void bar() {
synchronize(this) {
// do something
}
}
}
如您所见,有两个方法 foo 和 bar,它们都依赖于同步。
调用 foo() 时,会在 (this) 上获得一个锁;bar 会在 foo 调用时尝试做同样的事情(从而导致死锁)还是会意识到锁已经被同一个线程获得?
希望我的解释或多或少清楚;-)