Đi đến nội dung
Ngoại lệ JavaNghiêm trọng
Deadlock

Deadlock

Hai hoặc nhiều luồng bị chặn mãi mãi, mỗi luồng chờ luồng kia giải phóng khóa.

jvmspring

Nguyên nhân gây ra lỗi này

Luồng A giữ khóa 1 và chờ khóa 2, trong khi luồng B giữ khóa 2 và chờ khóa 1. Không luồng nào có thể tiếp tục, khiến ứng dụng treo. Đây là điều kiện runtime, không phải ngoại lệ.

Cách sửa

Luôn lấy khóa theo thứ tự nhất quán. Dùng tryLock() với timeout. Thu hẹp phạm vi khối synchronized. Dùng tiện ích java.util.concurrent thay vì khóa thủ công. Dùng jstack để phát hiện deadlock.

Tài liệu chính thức

Mã lỗi liên quan