# Identify thread bottlenecks
This tutorial shows you how to identify thread bottlenecks, including deadlocks and contentions, in a Java application. A thread deadlock is a condition in which two independent threads of control are blocked, each waiting for the other to take some action. Two threads waiting for each other can bring an application, or one section of the application, to a complete halt. A thread contention, or race conditions, occurs when a thread is waiting for a lock or resource that another thread holds. Programmers often add synchronization mechanisms to avoid these contentions, but it is possible that the synchronization itself can lead to deadlocks. 30 minutes
Start the tutorial