DeadlockDeadlock
Dwa lub więcej wątków jest zablokowanych na zawsze, każdy czekając na zwolnienie blokady przez drugi.
Co powoduje ten błąd
Wątek A trzyma blokadę 1 i czeka na blokadę 2, podczas gdy wątek B trzyma blokadę 2 i czeka na blokadę 1. Żaden wątek nie może kontynuować, powodując zawieszenie aplikacji. Jest to stan w czasie wykonania, a nie wyjątek.
Jak to naprawić
Zawsze pozyskuj blokady w spójnej kolejności. Używaj tryLock() z limitami czasu. Minimalizuj zakres bloków synchronized. Używaj narzędzi z java.util.concurrent zamiast ręcznego blokowania. Używaj jstack do wykrywania zakleszczeń.
Powiązane kody błędów
ArrayStoreExceptionArrayStoreException
Do tablicy próbuje się wstawić obiekt niewłaściwego typu.
NullPointerExceptionNullPointerException
Odwołanie null jest użyte tam, gdzie wymagany jest obiekt.
NegativeArraySizeExceptionNegativeArraySizeException
Tablica jest tworzona z ujemnym rozmiarem.
ConcurrentModificationExceptionConcurrentModificationException
Kolekcja jest modyfikowana podczas iteracji po niej.
LinkageErrorLinkageError
Klasa ma zależność od innej klasy, która uległa niekompatybilnej zmianie.
ClosedChannelExceptionClosedChannelException
Podjęto próbę wykonania operacji na kanale, który został zamknięty.