Monitory w javie
Związane z każdym obiektem
Same nie są reprezentowane jako klasy / obiekty!
Synchronizują dostęp do metod i bloków
synchronized
Dodatkowy monitor związany z klasą - dla metod statycznych synchronizowanych
Synchronizacja
Metody
synchronized
Blok
synchronized
użyteczny do synchronizacji dostępu do już istniejących obiektów, do których nie można dodać żadnych metod
synchronized ( obj ) { ... obj.method(); ... }
Zasady synchronizacji
Wejście do metody synchronizowanej (bloku synchronizowanego) powoduje
zajęcie monitora
(
którego?
), opuszczenie jej -
zwolnienie monitora
Metoda synchronizowana (blok synchronizowany) może być wykonywana na rzecz danego obiektu tylko przez wątek będący w posiadaniu monitora tego obiektu
Tylko jeden wątek może być w posiadaniu monitora danego obiektu, a po jego zajęciu tylko on sam może go zwolnić
Metody wait, notify / notifyAll
Zdefiniowane w klasie Object
Koordynacja działania wielu wątków
wait
może być wywołana tylko przez wątek będący w posiadaniu monitora
powoduje uśpienie wątku w kolejce związanej z monitorem
zwalnia monitor
wątek może być obudzony tylko gdy inny wątek wywoła notify
notify
budzi jeden wątek spośród oczekujących w kolejce 'wait'
obudzony wątek oczekuje aż wątek wywołujący
notify
zwolni monitor
notifyAll
działa jak
notify
, ale budzi wszystkie wątki
Przykład z tutoriala Javy