Monitor – obiekt, który może być bezpiecznie używany przez kilka wątków. Metody monitora chronione są przez muteksy, przez co w dowolnym momencie czasowym z dowolnej metody może korzystać tylko jeden wątek naraz. Upraszcza to budowę obiektów, zwalniając programistę z konieczności implementacji skomplikowanych wykluczeń.

Monitory umożliwiają także wątkom czasowe zwolnienie wyłącznego dostępu podczas oczekiwania na spełnienie jakiegoś warunku. W tym czasie inny wątek może bezpiecznie wykonać swoje zadanie, a gdy warunek zostanie spełniony, poprzedni wątek z powrotem przejmie wyłączną kontrolę i dokończy pracę. Dwa wątki mogą także sygnalizować sobie, że warunek został spełniony.

Monitory zostały wynalezione przez C.A.R. Hoare’a oraz Pera Brincha Hansena i zostały po raz pierwszy zaimplementowane w języku Concurrent Pascal.

Wzajemne wykluczanie Klasa obsługująca konto bankowe:

monitor class Account { private int balance := 0; invariant balance >= 0;

public method boolean withdraw(int amount) { if amount < 0 then error "Amount cannot be negative"; else if balance < amount then return false; else then balance := balance - amount;