Synchronisierte Methode ruft sich selbst rekursiv. Ist diese gebrochen?

Den Punkt bei dieser Frage ist zu verdeutlichen, dass Java nicht so funktioniert, wie ich es erwartet habe.

Wie würden Sie erwarten, dass die folgenden code zu Verhalten?

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();
  }
}

Ich würde erwarten, dass es zu hängen mit einem deadlock wartet auf die Rekursion abgeschlossen ist, aber stattdessen wirft es StackOverflow. Offensichtlich synchronisiert, nicht blockieren den Zugang zu den gleichen thread.

Ist das ein bug?

  • Ich könnte etwas fehlt, aber ich kann nicht sehen, die synchronisiert Schlüsselwort in Ihrem code.
  • sorry, schlampig von mir. Verändert die Quelle.
  • Synchronisiert Schlösser sind reentrant.
  • nennen Sie Ihre Quelle bitte.
  • Siehe meine Antwort unten.
InformationsquelleAutor Thom | 2012-11-02
Schreibe einen Kommentar