Trích dẫn từ Bên trong Máy ảo Java
Một luồng trong máy ảo Java yêu cầu khóa khi nó đến đầu vùng giám sát. Trong Java, có hai loại vùng giám sát: các câu lệnh được đồng bộ hóa và các phương thức đồng bộ hóa.
Giám sát
Màn hình giống như một tòa nhà có chứa một căn phòng đặc biệt mà chỉ một luồng có thể bị chiếm đóng tại một thời điểm. Phòng thường chứa một số dữ liệu. Từ khi một luồng vào phòng này cho đến khi nó rời đi, nó có quyền truy cập độc quyền vào bất kỳ dữ liệu nào trong phòng. Bước vào tòa nhà màn hình được gọi là "vào màn hình." Bước vào căn phòng đặc biệt bên trong tòa nhà được gọi là "mua màn hình." Chiếm phòng được gọi là "sở hữu màn hình" và rời khỏi phòng được gọi là "giải phóng màn hình". Rời khỏi toàn bộ tòa nhà được gọi là "thoát khỏi màn hình."
Ngoài việc được liên kết với một bit dữ liệu, một màn hình được kết hợp với một hoặc nhiều bit mã, mà trong sách này sẽ được gọi là vùng màn hình.
Như đã đề cập trước đó, ngôn ngữ này cung cấp hai cách tích hợp để xác định vùng màn hình trong chương trình của bạn: câu lệnh đồng bộ hóa và phương thức đồng bộ hóa. Hai cơ chế này, thực hiện khía cạnh loại trừ lẫn nhau của đồng bộ hóa, được hỗ trợ bởi tập lệnh của máy ảo Java.
Khóa
Để thực hiện khả năng loại trừ lẫn nhau của các màn hình, máy ảo Java liên kết một khóa (đôi khi được gọi là mutex) với từng đối tượng và lớp. Khóa giống như một đặc quyền mà chỉ một chủ đề có thể "sở hữu" tại bất kỳ thời điểm nào.
Một luồng duy nhất được phép khóa cùng một đối tượng nhiều lần. Đối với mỗi đối tượng, máy ảo Java duy trì số lần đối tượng đã bị khóa. Một đối tượng được mở khóa có số đếm bằng không. Khi một luồng có được khóa lần đầu tiên, số lượng lại được tăng lên một. Mỗi khi luồng có được một khóa trên cùng một đối tượng, số lượng lại được tăng lên.