DeadlockDeadlock
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.
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.
Mã lỗi liên quan
ArrayStoreExceptionArrayStoreException
Một đối tượng sai kiểu được lưu vào mảng.
NullPointerExceptionNullPointerException
Một tham chiếu null được sử dụng ở nơi yêu cầu một đối tượng.
NegativeArraySizeExceptionNegativeArraySizeException
Một mảng được tạo với kích thước âm.
ConcurrentModificationExceptionConcurrentModificationException
Một collection bị sửa đổi trong khi đang được duyệt.
LinkageErrorLinkageError
Một lớp có dependency vào lớp khác đã thay đổi không tương thích.
ClosedChannelExceptionClosedChannelException
Thực hiện thao tác trên một channel đã bị đóng.