Цель этого вопроса - проиллюстрировать, что 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. Очевидно, синхронизация не блокирует доступ к тому же потоку.
Это ошибка?