Перейти к содержимому
Исключения JavaКритическая
Deadlock

Deadlock

Два или более потока заблокированы навсегда: каждый ожидает освобождения блокировки другим.

jvmspring

Что вызывает эту ошибку

Поток A удерживает блокировку 1 и ожидает блокировку 2, тогда как поток B удерживает блокировку 2 и ожидает блокировку 1. Ни один поток не может продолжить работу, что приводит к зависанию приложения. Это состояние времени выполнения, а не исключение.

Как исправить

Всегда захватывайте блокировки в одном и том же порядке. Используйте tryLock() с тайм-аутом. Делайте synchronized-блоки как можно меньше. Вместо ручных блокировок применяйте средства java.util.concurrent. Для поиска взаимных блокировок используйте jstack.

Официальная документация

Связанные коды ошибок