DeadlockDeadlock
Два или более потока заблокированы навсегда: каждый ожидает освобождения блокировки другим.
Что вызывает эту ошибку
Поток A удерживает блокировку 1 и ожидает блокировку 2, тогда как поток B удерживает блокировку 2 и ожидает блокировку 1. Ни один поток не может продолжить работу, что приводит к зависанию приложения. Это состояние времени выполнения, а не исключение.
Как исправить
Всегда захватывайте блокировки в одном и том же порядке. Используйте tryLock() с тайм-аутом. Делайте synchronized-блоки как можно меньше. Вместо ручных блокировок применяйте средства java.util.concurrent. Для поиска взаимных блокировок используйте jstack.
Связанные коды ошибок
ArrayStoreExceptionArrayStoreException
В массив помещается объект несовместимого типа.
NullPointerExceptionNullPointerException
Нулевая ссылка используется там, где требуется объект.
NegativeArraySizeExceptionNegativeArraySizeException
Создание массива с отрицательным размером.
ConcurrentModificationExceptionConcurrentModificationException
Коллекция изменяется в процессе итерации по ней.
LinkageErrorLinkageError
Класс зависит от другого класса, который был изменён несовместимым образом.
ClosedChannelExceptionClosedChannelException
Выполняется операция над каналом, который уже был закрыт.