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