Start here. This is the direct spoken answer to practice first.
Overview
A thread dump is a point-in-time view of thread states and stacks; several samples reveal whether work is progressing.
I capture several thread dumps a few seconds apart and correlate them with CPU, request latency, executor metrics, and the incident timeline. Repeated identical stacks can show a stable lock wait, blocked I/O, or a hot loop, while changing stacks may show slow progress. A dump identifies thread state, stack frames, owned monitors, and locks being awaited. JVM-reported deadlock information is useful, but not every stuck service is a formal deadlock.