同步方法递归调用自身。这是否有问题?

10 浏览
0 Comments

同步方法递归调用自身。这是否有问题?

这个问题的关键是说明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异常。显然,synchronized并不能阻止对同一线程的访问。

这是一个bug吗?

0