Mô hình bộ nhớ Java (JMM) định nghĩa cách sợi trong Java tương tác qua bộ nhớ. Nó giải thích cách và khi nào những thay đổi do một sợi làm cho người khác thấy được. Hiểu được JMM là thiết yếu để viết đúng chương trình Java và tránh những vấn đề thông thường như chủng tộc dữ liệu và vấn đề tầm nhìn.

Cơ bản của Mô hình Bộ nhớ Java

Các quy tắc JMM xác định cách mà sợi đọc và viết các biến được chia sẻ. Nó đảm bảo rằng các hoạt động là nguyên tử và cung cấp đảm bảo về tầm nhìn của các thay đổi qua các sợi. Mô hình này giới thiệu các khái niệm như xảy ra trước khi các mối quan hệ, mà quyết định thứ tự của hành động trong tiến hành đồng thời.

Gương mẫu thực tiễn

Hãy xem một ví dụ đơn giản là khi một sợi được cập nhật một biến chung và một sợi khác đọc nó. Nếu không đồng bộ hóa đúng, sợi chỉ có thể thấy dữ liệu cũ do ngứa hay sắp xếp lại. Dùng các khối đồng bộ hoặc các biến cố dễ thay đổi để đảm bảo tầm nhìn theo quy tắc JMM.

Những vấn đề và giải pháp thông thường

  • Các cuộc đuata: Occcccccc khi nhiều mạch sửa đổi dữ liệu chia sẻ mà không cần đồng bộ hoá. Hãy dùng các khối đồng bộ hoặc các lớp nguyên tử để ngăn chặn việc này.
  • Vấn đề khả quan: thay đổi bởi một sợi không thấy được. Hãy tuyên bố biến số chia sẻ là ) [FLT:] hoặc sử dụng sự đồng bộ rõ rệt.
  • Sắp xếp lại: Bộ biên dịch hoặc CPU có thể gây ra hành vi bất ngờ. Sự đồng bộ đúng ngăn cản việc sắp xếp lại vấn đề.