Cytat z Inside the Java Virtual Machine
Wątek w wirtualnej maszynie Java żąda blokady, gdy dociera na początek regionu monitorowania. W Javie istnieją dwa rodzaje regionów monitorowania: zsynchronizowane instrukcje i zsynchronizowane metody.
Monitor
Monitor przypomina budynek, w którym znajduje się jedno specjalne pomieszczenie, w którym może przebywać tylko jeden wątek naraz. Pokój zwykle zawiera jakieś dane. Od momentu, gdy wątek wejdzie do tego pokoju do chwili opuszczenia go, ma wyłączny dostęp do wszelkich danych w pokoju. Wejście do budynku monitora nazywa się „wejściem na monitor”. Wejście do specjalnego pomieszczenia wewnątrz budynku nosi nazwę „pozyskania monitora”. Zajmowanie pokoju jest nazywane „posiadaniem monitora”, a opuszczanie pokoju - „zwolnieniem monitora”. Opuszczenie całego budynku nazywane jest „wyjściem z monitora”.
Oprócz tego, że jest powiązany z pewną ilością danych, monitor jest powiązany z jednym lub kilkoma bitami kodu, które w tej książce będą nazywane regionami monitorów.
Jak wspomniano wcześniej, język zapewnia dwa wbudowane sposoby identyfikowania regionów monitorowania w programach: zsynchronizowane instrukcje i zsynchronizowane metody. Te dwa mechanizmy, które implementują aspekt wzajemnego wykluczania synchronizacji, są obsługiwane przez zestaw instrukcji wirtualnej maszyny Java.
Zamek
Aby zaimplementować możliwość wzajemnego wykluczania monitorów, wirtualna maszyna Java wiąże blokadę (czasami nazywaną muteksem) z każdym obiektem i klasą. Blokada jest jak przywilej, który może posiadać tylko jeden wątek w danym momencie.
Pojedynczy wątek może wielokrotnie blokować ten sam obiekt. Dla każdego obiektu wirtualna maszyna Java przechowuje licznik, ile razy obiekt został zablokowany. Odblokowany obiekt ma liczbę zerową. Gdy wątek uzyskuje blokadę po raz pierwszy, liczba jest ponownie zwiększana do jednego. Za każdym razem, gdy wątek uzyskuje blokadę na tym samym obiekcie, liczba jest ponownie zwiększana.