2017-07-06 5 views
2

Lassen Sie uns sagen, dass ich diesen Code-Block haben innerhalb einer Methode:Kann einfacher Java-synchronisierter Block wirft Exception?

... 
synchronized (this) { 
    this.var = value; 
} 
... 

Könnte es ein Szenario sein, der macht, dass synchronized Block eine Ausnahme auslöst (unter der Annahme this, var und value mit nicht null Werte)?

Danke!

+0

Ja, viele, aber wir wissen nicht, welche Typen sie sind, also ist es schwer, genau zu sein. –

+0

@SteveSmith an welche Ausnahmen denken Sie? –

+0

@Andy Turner Vielleicht eine Casting-Ausnahme? (Von oben auf meinem Kopf). Obwohl sie vom Compiler abgefangen werden würden? –

Antwort

1

Nach den Java Language Specification about the synchronized statement:

Der ausgeführten Thread verriegelt den Monitor mit V. assoziierte dann tritt der Block ausgeführt wird, [...]

und die Java virtual Machine Specification on Synchronization, das erklärt, wie die erwähnte Monitore sind zu verwenden, spricht nur über Ausnahmen aus dem synchronisierten Block geworfen werden. Daher darf die synchronized-Anweisung selbst keine Ausnahmen auslösen.

Es kann also in Ihrem Fall kein Szenario geben, in dem eine Ausnahme ausgelöst wird.

+0

liest ein wenig [weiter] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.19-300-CB): "Wenn die Ausführung des Blocks abgeschlossen ist abrupt aus irgendeinem Grund, dann wird der Monitor entsperrt und die synchronisierte Anweisung wird aus dem gleichen Grund abrupt beendet. " –

+0

Ja, aber' this.var = value; 'kann nicht abrupt abgeschlossen werden, es sei denn, es gibt einen Bug in der JVM und dann alle Wetten sind in Bezug auf die Handhabung der daraus resultierenden werfen ausgeschaltet. – JeremyP

+0

Ich denke, das Anhalten des Threads, trotz veraltet, wird dazu führen, dass diese Anweisung abrupt mit einem ThreadDeath Error abgeschlossen wird ... die Frage ist über die synchronisierte werfen eine Ausnahme, nicht über "Umgang", * sicher, weder darüber werfen * ** Fehler **, aber es ist immer noch ein Szenario, das das OP berücksichtigen muss. * Nicht zu widersprechen, sondern nur Ihre Antwort zu ergänzen * –

Verwandte Themen