DeadlockDeadlock
Dvě nebo více vláken jsou navždy zablokována, přičemž každé čeká, až druhé uvolní zámek.
Co způsobuje tuto chybu
Vlákno A drží zámek 1 a čeká na zámek 2, zatímco vlákno B drží zámek 2 a čeká na zámek 1. Žádné vlákno nemůže pokračovat, což způsobí zamrznutí aplikace. Jedná se o stav za běhu, nikoli výjimku.
Jak to opravit
Vždy získávejte zámky v konzistentním pořadí. Používejte tryLock() s časovými limity. Minimalizujte rozsah synchronizovaných bloků. Namísto ručního zamykání používejte nástroje z java.util.concurrent. K detekci deadlocků použijte jstack.
Související chybové kódy
ArrayStoreExceptionArrayStoreException
Do pole je uložen objekt nesprávného typu.
NullPointerExceptionNullPointerException
Nulová reference je použita na místě, kde je vyžadován objekt.
NegativeArraySizeExceptionNegativeArraySizeException
Pole je vytvořeno se zápornou velikostí.
ConcurrentModificationExceptionConcurrentModificationException
Kolekce je modifikována v průběhu iterace.
LinkageErrorLinkageError
Třída má závislost na jiné třídě, která se nekompatibilně změnila.
ClosedChannelExceptionClosedChannelException
Je provedena operace na kanálu, který byl zavřen.