Trong các hệ thống đồng thời cao, có thể khó tin rằng việc sử dụng khóa của bạn là chính xác. Cụ thể, deadlocks có thể xảy ra nếu khóa được mua theo thứ tự không được mong đợi trong khi được mua theo thứ tự thích hợp trong một chuỗi khác.Xác nhận thứ tự đồng bộ hóa trong Java
Có các công cụ (ví dụ: Coverity) có thể thực hiện phân tích tĩnh trên cơ sở mã và tìm các đơn đặt hàng khóa "bất thường". Tôi muốn khám phá các tùy chọn khác để đáp ứng nhu cầu của tôi.
Có bất kỳ công cụ * trọng lượng nhẹ nào để thiết lập mã Java có thể phát hiện các trường hợp ổ khóa đang được mua lại theo thứ tự khác ngoài dự kiến không? Tôi đồng ý với việc yêu cầu rõ ràng các lệnh khóa thông qua nhận xét/chú thích.
Giải pháp miễn phí và/hoặc nguồn mở được ưu tiên. Xin vui lòng cũng bình luận nếu có phương pháp không thiết bị cho vấn đề này.
* Đối với mục đích của tôi, trọng lượng nhẹ có nghĩa là ...
- Nếu đó là thiết bị đo đạc, tôi vẫn có thể chạy chương trình của tôi với cùng sân chơi bóng chày hiệu suất. 30-50% suy thoái là chấp nhận được, tôi giả sử.
- Tôi không phải mất nửa ngày để tương tác với công cụ này để có được "không sao". Lý tưởng nhất là tôi chỉ nên nhận thấy rằng tôi đang sử dụng nó khi có vấn đề.
- Nếu đó là thiết bị đo, nó sẽ dễ dàng vô hiệu hóa cho môi trường sản xuất.
- Nó không nên lộn xộn mã của tôi ở mọi câu lệnh
synchronize
. Như đã đề cập trước đây, tôi đồng ý với việc nhận xét/chú thích một cách rõ ràng các đối tượng hoặc các lớp của các đối tượng bị khóa với các thứ tự tương đối.
... đó là lý do Mô hình diễn viên và STM ngày càng trở nên phổ biến hơn –
Ai đó có phản hồi tham chiếu java.lang.Thread.holdsLock (Object) đã bị xóa ngay lập tức. Tôi không thể tự tìm ra phương pháp đó, cảm ơn con trỏ. Câu hỏi của tôi vẫn đứng vững. –
bạn đã tìm thấy bất cứ điều gì tốt để làm một cái gì đó như thế? Tôi có mã phát hiện bế tắc khá phức tạp trong C++ và trong trường hợp của tôi, tôi muốn thiết lập mã Java của chúng tôi để bắt các trường hợp khóa trên C++ và/hoặc bên java có thể can thiệp lẫn nhau và dẫn đến deadlocks. – Pavel