Start here. This is the direct spoken answer to practice first.
Overview
A deadlock forms when threads hold resources while waiting in a cycle that no participant can break.
A typical deadlock occurs when one thread holds lock A and waits for lock B while another holds B and waits for A. Neither thread can progress. Prevention starts with a consistent global lock order, avoiding nested locks where possible, and not holding locks while calling unknown or blocking external code. A thread dump can identify blocked threads, the monitors they own, and the cycle they are waiting on.