Přeskočit na obsah
Java výjimkyFatální
Deadlock

Deadlock

Dvě nebo více vláken jsou navždy zablokována, přičemž každé čeká, až druhé uvolní zámek.

jvmspring

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.

Oficiální dokumentace

Související chybové kódy