この質問のポイントは、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をスローします。明らかに同期されても、同じスレッドへのアクセスはブロックされません。
これはバグですか?