DeadlockDeadlock
Twee of meer threads zijn permanent geblokkeerd terwijl elk wacht tot de ander een vergrendeling vrijgeeft.
Wat veroorzaakt deze fout
Thread A houdt lock 1 vast en wacht op lock 2, terwijl thread B lock 2 vasthoudt en wacht op lock 1. Geen van beide threads kan verdergaan, waardoor de applicatie vastloopt. Dit is een runtimeconditie, geen uitzondering.
Hoe op te lossen
Verwerf vergrendelingen altijd in een consistente volgorde. Gebruik tryLock() met time-outs. Minimaliseer de reikwijdte van gesynchroniseerde blokken. Gebruik java.util.concurrent-hulpmiddelen in plaats van handmatige vergrendeling. Gebruik jstack om deadlocks op te sporen.
Gerelateerde foutcodes
ArrayStoreExceptionArrayStoreException
Een object van het verkeerde type wordt opgeslagen in een array.
NullPointerExceptionNullPointerException
Een null-referentie wordt gebruikt waar een object vereist is.
NegativeArraySizeExceptionNegativeArraySizeException
Een array wordt aangemaakt met een negatieve grootte.
ConcurrentModificationExceptionConcurrentModificationException
Een collectie wordt gewijzigd terwijl er overheen wordt geïtereerd.
LinkageErrorLinkageError
Een klasse heeft een afhankelijkheid van een andere klasse die een incompatibele wijziging heeft ondergaan.
ClosedChannelExceptionClosedChannelException
Er wordt een bewerking uitgevoerd op een kanaal dat al gesloten is.