Bằng trực giác, một ConcurrentHashMap sẽ hoạt động giống như một tập các biến dễ bay hơi; các khóa bản đồ là các địa chỉ biến. get(key)
và put(key, value)
sẽ hoạt động như đọc và ghi dễ bay hơi.
Điều đó không được nêu rõ trong tài liệu. Tuy nhiên, tôi tin chắc rằng đó là trường hợp. Nếu không, sẽ có rất nhiều hành vi bất ngờ, đáng ngạc nhiên làm suy yếu logic ứng dụng. Tôi không nghĩ Doug Lea sẽ làm điều đó với chúng tôi. Để chắc chắn, ai đó vui lòng hỏi anh ấy theo số concurrency-interest
danh sách gửi thư.
Giả sử nó không tuân theo ngữ nghĩa không ổn định, chúng ta có thể lý do dựa trên Java Memory Model -
Tất cả biến động đọc và viết thành một tổng số thứ tự duy nhất. Điều này có thể được coi là một dòng thời gian giả, nơi đọc/ghi là điểm trên đó.
Đọc dễ bay hơi thấy ghi dễ bay hơi trước ngay lập tức và chỉ thấy ghi đó. "Trước" ở đây là theo dòng thời gian giả.
Dòng thời gian giả có thể khác với dòng thời gian "thực". Tuy nhiên, về lý thuyết, một ghi dễ bay hơi không thể bị trì hoãn vô hạn trên dòng thời gian giả. Và, trong pracitce, hai dòng thời gian là khá gần.
Vì vậy, chúng tôi có thể chắc chắn rằng, một ghi dễ bay hơi sẽ trở thành hiển thị "rất nhanh" để đọc.
Bạn định đọc dữ liệu như thế nào? –
sử dụng đơn giản get() –
Sau đó, bạn không nên lo lắng, nó sẽ trả về giá trị chính xác nhất. –