DeadlockDeadlock
Dos o más hilos quedan bloqueados indefinidamente, esperando cada uno a que el otro libere un bloqueo.
Qué causa este error
El hilo A retiene el bloqueo 1 y espera el bloqueo 2, mientras que el hilo B retiene el bloqueo 2 y espera el bloqueo 1. Ningún hilo puede avanzar, lo que provoca que la aplicación se cuelgue. Es una condición en tiempo de ejecución, no una excepción.
Cómo solucionarlo
Adquiere siempre los bloqueos en un orden consistente. Usa tryLock() con tiempos de espera. Minimiza el alcance de los bloques synchronized. Usa las utilidades de java.util.concurrent en lugar de bloqueo manual. Usa jstack para detectar deadlocks.
Códigos de Error Relacionados
ArrayStoreExceptionArrayStoreException
Se almacena un objeto del tipo incorrecto en un array.
NullPointerExceptionNullPointerException
Se utiliza una referencia null donde se requiere un objeto.
NegativeArraySizeExceptionNegativeArraySizeException
Se crea un array con tamaño negativo.
ConcurrentModificationExceptionConcurrentModificationException
Se modifica una colección mientras se está iterando sobre ella.
LinkageErrorLinkageError
Una clase depende de otra clase que tiene un cambio incompatible.
ClosedChannelExceptionClosedChannelException
Se intenta una operación sobre un canal que ha sido cerrado.