这个问题的重点是说明Java不能按我预期的那样工作。

您如何看待以下代码的行为?

public class SynchTester {
  private static SynchTester synchTester;

  public synchronized static SynchTester getSynchTester(){
    if(synchTester==null){
      synchTester = new SynchTester();
    }

    return synchTester;
  }

  private SynchTester() {
    SynchTester myTester = getSynchTester();
  }

  public static void main(String[] args) {
    SynchTester tester = SynchTester.getSynchTester();
  }
}

我希望它卡在死锁上,等待递归完成,但是会抛出StackOverflow。明显同步不会阻止对同一线程的访问。

这是一个错误吗?

最佳答案

在Java中,同步锁为reentrant



资料来源:请参阅this page的底部

关于java - 同步方法以递归方式调用自身。这坏了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13197756/

10-13 08:07