tôi đang theo một hướng dẫn và về cơ bản giải thích về nguyên nhân của tình trạng chủng tộc mà xảy ra khi thay đổi kích thước HashMap trong một môi trường đa luồng:HashMap trong môi trường đa luồng khi thực hiện thay đổi kích thước
Trong Java, nếu hai chủ đề đồng Thời gian tìm thấy rằng bây giờ HashMap cần thay đổi kích thước và cả hai đều cố gắng thay đổi kích thước. về quá trình thay đổi kích thước của HashMap trong Java, phần tử trong nhóm được lưu trữ trong danh sách được liên kết sẽ được đảo ngược theo thứ tự trong quá trình di chuyển sang nhóm mới vì java HashMap không thêm phần tử mới vào đuôi thay vì nó thêm phần tử mới vào đầu tránh đi qua đuôi. Nếu tình trạng chủng tộc xảy ra sau đó bạn sẽ kết thúc với một vòng lặp vô hạn
Tôi có hai câu hỏi sau khi đọc bài viết này:
- Tại sao danh sách liên kết cho mỗi xô bị đảo ngược theo thứ tự?
- Tôi có thể thấy có thể có điều kiện chủng tộc, nhưng không thể thấy vòng lặp vô hạn đến như thế nào? Có phải vì một sợi có thể nối đầu phần tử vào đuôi trong khi một chuỗi khác làm theo thứ tự ngược lại không?
Hãy giúp tôi làm rõ điều này, được đánh giá cao!
Tôi không biết câu trả lời cho câu hỏi của bạn - Tôi chỉ muốn khuyên bạn sử dụng thread-safe [ConcurrentHashMap] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html) trong một chương trình đa luồng. –
'HashMap' không an toàn với luồng, đó là một ý tưởng tồi để sử dụng trong môi trường nhiều luồng. Bạn sẽ nhận được một điều kiện chủng tộc hoặc ở đây trên một phương pháp khác. – gaborsch