Mehrere Java-threads scheinbar Verriegelung gleichen monitor?

In einer Java-threaddump ich Folgendes gefunden:

"TP-Processor184" daemon prio=10 tid=0x00007f2a7c056800 nid=0x47e7 waiting for monitor entry [0x00007f2a21278000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.jackrabbit.core.state.SharedItemStateManager.getNonVirtualItemState(SharedItemStateManager.java:1725)
    - locked <0x0000000682f99d98> (a org.apache.jackrabbit.core.state.SharedItemStateManager)
    at org.apache.jackrabbit.core.state.SharedItemStateManager.getItemState(SharedItemStateManager.java:257)

"TP-Processor137" daemon prio=10 tid=0x00007f2a7c00f800 nid=0x4131 waiting for monitor entry [0x00007f2a1ace7000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.jackrabbit.core.state.SharedItemStateManager.getNonVirtualItemState(SharedItemStateManager.java:1725)
    - locked <0x0000000682f99d98> (a org.apache.jackrabbit.core.state.SharedItemStateManager)
    at org.apache.jackrabbit.core.state.SharedItemStateManager.getItemState(SharedItemStateManager.java:257)

Der Punkt ist hier, dass beide threads gesperrt-monitor <0x0000000682f99d98> (unabhängig von Ihnen warten jetzt auf zwei verschiedenen Monitoren).

Wenn man bei der Thread-Dump-Analysator, mit diesem monitor wird ausgewählt, es ist wirklich sagt, "Threads sperren monitor: 2" an der Unterseite, und "2 Thread(s) sperren". Bitte sehen https://lh4.googleusercontent.com/-fCmlnohVqE0/T1D5lcPerZI/AAAAAAAAD2c/vAHcDiGOoMo/s971/locked_by_two_threads_3.png für den screenshot, ich bin nicht berechtigt, einfügen von Bildern hier.

Bedeutet dies threaddumps sind nicht atomic mit Respekt zu überwachen, Informationen zu sperren? Ich kann mir nicht vorstellen das wirklich ein schließ-Fehler der JVM (1.6.0_26-b03).

Eine ähnliche Frage wurde bereits gefragt, in Können mehrere threads die Sperre auf dem gleichen monitor in Java?, aber die Antwort mir nicht sehen, der eigentliche Punkt von mehreren threads sperren den gleichen monitor, obwohl Sie warten, für einen anderen.

Update Mai 13th 2014:

Neuere Frage Mehrere threads die gleiche Sperre? - code zum reproduzieren des Verhaltens und @rsxg angemeldet hat, einen entsprechenden bug-report https://bugs.openjdk.java.net/browse/JDK-8036823 entlang der Linien von seine Antwort hier.

  • Keine Rückmeldung auf meine Antwort dude? Ich Schnitt ihn darauf hin, dass spätere Versionen des Codes haben eine wait() on line 1725. Akzeptieren Sie bitte, ob dies richtig ist.
  • Wir sind mit Jackrabbit version 1.6.5. Ein Freund von mir auch gesehen, dass wait() auf der gleichen Zeilennummer in der version 2.3.6, als es auffallend scheint zu passen, aber leider ist das die falsche sourcecode...
InformationsquelleAutor jfrantzius | 2012-03-02
Schreibe einen Kommentar