Deadlock xảy ra khi các thread chờ đợi tài nguyên của nhau theo vòng tròn — tất cả bị blocked mãi mãi.
Ví dụ: Thread A giữ Lock 1, chờ Lock 2; Thread B giữ Lock 2, chờ Lock 1. Phòng tránh:
- lock ordering — luôn acquire lock theo cùng một thứ tự
- timeouts — dùng
tryLock(timeout) - tránh nested lock
- dùng cấu trúc cấp cao hơn (concurrent collections, ExecutorService). Phát hiện deadlock cần monitor thread states bằng JVisualVM hoặc thread dump