Frage

Gibt es unklar, Nebenwirkungen zu werfen eine Ausnahme innerhalb eines synchronisierten Klausel? Was passiert mit dem Schloss?

private void doSomething() throws Exception {...}

synchronized (lock) {   
    doSomething();       
}
War es hilfreich?

Lösung

Ich sehe keine Nebenwirkung.

Die Sperre garantiert beendet werden in allen Fällen und eine Ausnahme macht da keine Ausnahme (Wortspiel beabsichtigt).

Andere Tipps

Wie Sie würden hoffen, wird die Sperre aufgehoben normal.

Als Referenz in dem entsprechenden Abschnitt des JLS, die dieses Verhalten gewährleistet ist § 14.19 :

  

Wenn die Ausführung des Blocks normalerweise abgeschlossen ist, dann ist das Schloss entriegelt und die synchronisierte Anweisung abgeschlossen ist normal. Wenn die Ausführung des Blocks abrupt aus irgendeinem Grund beendet ist, dann das Schloss entriegelt und die synchronisierte Anweisung schließt dann abrupt aus dem gleichen Grund.

( ‚abrupte Beendigung‘ definiert wird an anderer Stelle in der JLS Ausnahmen von JVM umfasst, Ausnahmen von throw angehoben, und die Verwendung der break, continue oder return Aussagen außerhalb des Blocks zu übertragen.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top