DeadlockDeadlock
Due o più thread sono bloccati indefinitamente, ciascuno in attesa che l'altro rilasci un lock.
Cause di questo errore
Il thread A detiene il lock 1 e attende il lock 2, mentre il thread B detiene il lock 2 e attende il lock 1. Nessun thread può procedere, causando il blocco dell'applicazione. Si tratta di una condizione di runtime, non di un'eccezione.
Come correggerlo
Acquisire sempre i lock in un ordine coerente. Usare tryLock() con timeout. Minimizzare lo scope dei blocchi synchronized. Preferire le utilità di java.util.concurrent al locking manuale. Usare jstack per rilevare i deadlock.
Codici di errore correlati
ArrayStoreExceptionArrayStoreException
Si tenta di memorizzare un oggetto del tipo errato in un array.
NullPointerExceptionNullPointerException
Un riferimento null viene utilizzato dove è richiesto un oggetto.
NegativeArraySizeExceptionNegativeArraySizeException
Si tenta di creare un array con dimensione negativa.
ConcurrentModificationExceptionConcurrentModificationException
Una collezione viene modificata mentre è in corso un'iterazione su di essa.
LinkageErrorLinkageError
Una classe ha una dipendenza da un'altra classe che ha subito una modifica incompatibile.
ClosedChannelExceptionClosedChannelException
Viene tentata un'operazione su un canale già chiuso.