这个问题的重点是说明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。显然同步不会阻止访问同一个线程。
这是个bug吗