"Chào, Amigo!"

"Trong các bài học trước của tôi, đôi khi tôi đã sử dụng các từ 'mutex' và 'monitor', bây giờ là lúc để cho bạn biết ý nghĩa của chúng."

"Ta nghe rõ."

"Một mutex là một đối tượng đặc biệt để đồng bộ hóa các luồng/quy trình. Nó có thể có hai trạng thái: bận và rảnh. Nói một cách đơn giản, một mutex là một biến boolean có thể có hai giá trị: bận (đúng) và rảnh (sai)."

"Khi một luồng muốn sở hữu một đối tượng, nó sẽ đánh dấu mutex của đối tượng là bận. Và khi hoàn thành công việc với đối tượng, nó sẽ đánh dấu mutex của nó là rảnh."

"Nói cách khác, một mutex giống như một dấu hiệu 'bận/rảnh' trên cửa?"

"Có. Và một mutex như vậy được liên kết với mọi đối tượng trong Java. Chỉ máy Java mới có quyền truy cập trực tiếp vào mutex. Nó bị ẩn khỏi lập trình viên."

"Vậy chúng ta dùng nó như thế nào?"

"Trong Java, chúng tôi có thể làm việc với một mutex thông qua màn hình."

"Màn hình là một cơ chế đặc biệt (đoạn mã) được xếp lớp trên cùng của một mutex. Nó đảm bảo tương tác đúng cách với mutex. Việc đánh dấu một đối tượng là bận là chưa đủ. Vẫn cần phải đảm bảo rằng các luồng khác không cố gắng sử dụng đối tượng bận."

"Trong Java, màn hình được triển khai bằng cách sử dụng từ khóa được đồng bộ hóa."

"Khi bạn viết một khối được đồng bộ hóa, trình biên dịch Java sẽ thay thế nó bằng ba đoạn mã:"

1) Khi bắt đầu khối được đồng bộ hóa, mã được thêm vào đánh dấu mutex là bận.

2)  Ở cuối khối được đồng bộ hóa, mã được thêm vào để đánh dấu mutex là miễn phí.

3)  Trước khối được đồng bộ hóa, mã được thêm vào, nếu bộ chuyển đổi đang bận, sẽ khiến luồng đợi cho đến khi bộ chuyển đổi được giải phóng.

"Đây là cách thức hoạt động của nó:"

Mã số Làm thế nào nó hoạt động Sự miêu tả
synchronized(object)
{

object.doJob();

}
while (object.mutex)
Thread.sleep(1);

object.mutex = true;

object.doJob();

object.mutex = false;

Chuỗi ngủ miễn là mutex đang bận
(chúng tôi thoát khỏi vòng lặp khi mutex được giải phóng). Đánh dấu mutex là bận.

Thực thi doTask();

Đánh dấu mutex là miễn phí

"Trong thực tế, logic ở đó khác và phức tạp hơn. Nhưng đây chỉ là những chi tiết."

"Tôi có thể có các chi tiết?"

"Cho đến khi bạn học cách sử dụng nó đúng cách, thì chẳng có ích gì khi bị vướng vào các chi tiết."

"Một vài cấp độ trước, tôi đã đưa cho bạn danh sách tất cả các trạng thái luồng có mũi tên chuyển tiếp và danh sách các phương thức ảnh hưởng đến trạng thái này. Bạn có nhớ nhiều không?"

"Không hẳn. Chỉ là tôi quên mọi thứ quá nhanh..."

"Bạn càng ít thực hành, bạn càng ít thu được lợi ích từ lý thuyết."

"Đến Cấp độ 40, bạn sẽ học cách sử dụng tất cả những thứ này và tôi sẽ giải thích cách thức hoạt động thực sự của tất cả những thứ này. Trong khi chờ đợi, chỉ cần học cách sử dụng tất cả chúng đúng cách. Hiểu chưa?"

"Vâng, cảm ơn, Ellie."