DeadlockDeadlock
Zwei oder mehr Threads sind dauerhaft blockiert, weil jeder auf die Freigabe eines Locks durch den anderen wartet.
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.
Verwandte Fehlercodes
ArrayStoreExceptionArrayStoreException
Ein Objekt des falschen Typs wird in einem Array gespeichert.
NullPointerExceptionNullPointerException
Eine Null-Referenz wird verwendet, wo ein Objekt erwartet wird.
NegativeArraySizeExceptionNegativeArraySizeException
Ein Array wird mit einer negativen Größe erstellt.
ConcurrentModificationExceptionConcurrentModificationException
Eine Collection wird während der Iteration verändert.
LinkageErrorLinkageError
Eine Klasse hat eine Abhängigkeit von einer anderen Klasse, die eine inkompatible Änderung erfahren hat.
ClosedChannelExceptionClosedChannelException
Es wird eine Operation auf einem bereits geschlossenen Channel versucht.