Zum Inhalt springen
Java-AusnahmenFatal
Deadlock

Deadlock

Zwei oder mehr Threads sind dauerhaft blockiert, weil jeder auf die Freigabe eines Locks durch den anderen wartet.

jvmspring

Was verursacht diesen Fehler

Thread A hält Lock 1 und wartet auf Lock 2, während Thread B Lock 2 hält und auf Lock 1 wartet. Keiner der Threads kann fortfahren, was die Anwendung zum Stillstand bringt. Dies ist ein Laufzeitzustand, keine Ausnahme.

So beheben Sie ihn

Akquirieren Sie Locks stets in konsistenter Reihenfolge. Verwenden Sie tryLock() mit Timeouts. Begrenzen Sie den Geltungsbereich synchronized-Blöcken. Setzen Sie java.util.concurrent-Hilfsmittel anstelle manueller Sperren ein. Verwenden Sie jstack zur Deadlock-Erkennung.

Offizielle Dokumentation

Verwandte Fehlercodes