Monitor jest podejście do synchronizowania dwóch lub więcej zadań , że wykorzystanie udostępnionych zasobów, zwykle oddzielnych urządzeń (drukarki) lub zestawów zmiennych.
W przeszłości systemy operacyjne były zredukowane do prostego programu monitorującego, łączącego w łańcuch wykonywanie innych (na przykład DOS IBM 360 pod koniec lat sześćdziesiątych). To znaczenie jest dziś niezwykłe i nie ma nic wspólnego z obecnym znaczeniem (synchronizacja).
Monitor składa się z:
Rozważ dwa wątki, które chcą się ze sobą komunikować. Pierwszy wątek wysyła komunikaty do drugiego wątku za pośrednictwem kolejki . Jeśli kolejka jest pusta, drugi wątek musi czekać na nową wiadomość. Taką kolejkę można zaimplementować za pomocą następującego kodu:
import java.util.*; public class EchangeMessage { private ArrayList l = new ArrayList(); public void enfiler(Object o) { l.add(o); if(l.size()==1) { try { this.notify(); } catch (IllegalMonitorStateException e) {} } } public Object defiler() { if(l.size()==0) { try { this.wait(); } catch (InterruptedException e){} } Object o = l.get(0); l.remove(0); return o; } public synchronized boolean vide() { return l.isEmpty(); } } |
Ta klasa używa trzech metod.
W odniesieniu do tego przykładu można poczynić następujące uwagi dotyczące działania Javy:
|