Tôi nghĩ rằng tôi hiểu mối quan hệ đã xảy ra trước đó đối với các biến đơn lẻ. Nếu tôi viết một trường dễ bay hơi, tất cả các lần đọc tiếp theo của trường này sẽ chứa giá trị mới này. Viết volatile
vượt qua hàng rào bộ nhớ và chuyển giá trị mới sang bộ nhớ chính.Mô hình bộ nhớ Java - chính xác những gì được xả vào bộ nhớ khi vượt qua rào cản bộ nhớ?
Tôi vẫn chưa rõ về những gì xảy ra trong tất cả các trường hợp khác - ví dụ: Thread.start()
, synchronized
hoặc khóa mới trong java.util.concurrent
. Điều đó có nghĩa là họ cũng vượt qua rào cản bộ nhớ? Dữ liệu nào được xóa từ bộ đệm cục bộ sang bộ nhớ chính? Nói cách khác, phạm vi của việc vượt qua là gì?
Có phải mọi thứ luôn luôn bị xóa? Bây giờ trở lại volatile
, nó có tuôn ra nhiều hơn chỉ một trường volatile
duy nhất không?
Tốt điểm. Tôi đã thay đổi ngôn ngữ. –
Ngoài ra, bạn nên đề cập rằng nó loại bỏ bất kỳ lưu trữ được lưu trữ nào bị bẩn trong bộ nhớ trung tâm. Xin lỗi để được picky nit. Đây là một câu hỏi hay. – Gray
@Gray bạn có thể vui lòng xây dựng (hoặc cung cấp liên kết) trên bộ nhớ đệm ẩn trong bộ nhớ chính không? Nó là gì? –