DeadlockDeadlock
Deux threads ou plus sont bloqués indéfiniment, chacun attendant que l'autre libère un verrou.
Causes de cette erreur
Le thread A détient le verrou 1 et attend le verrou 2, tandis que le thread B détient le verrou 2 et attend le verrou 1. Aucun thread ne peut progresser, ce qui fait planter l'application. C'est une condition d'exécution, pas une exception.
Comment la corriger
Acquérez toujours les verrous dans un ordre cohérent. Utilisez tryLock() avec des délais d'attente. Minimisez la portée des blocs synchronized. Utilisez les utilitaires java.util.concurrent au lieu du verrouillage manuel. Utilisez jstack pour détecter les deadlocks.
Codes d'erreur associés
ArrayStoreExceptionArrayStoreException
Un objet du mauvais type est stocké dans un tableau.
NullPointerExceptionNullPointerException
Une référence null est utilisée là où un objet est requis.
NegativeArraySizeExceptionNegativeArraySizeException
Un tableau est créé avec une taille négative.
ConcurrentModificationExceptionConcurrentModificationException
Une collection est modifiée pendant qu'elle est parcourue.
LinkageErrorLinkageError
Une classe dépend d'une autre classe ayant subi un changement incompatible.
ClosedChannelExceptionClosedChannelException
Une opération est tentée sur un canal qui a été fermé.