monitore in java++ aufgabe 2 von markus schlebusch christoph reinboth sebastian zok johannes stolte...
TRANSCRIPT
Monitore in Java++
Aufgabe 2
von
Markus Schlebusch
Christoph Reinboth
Sebastian Zok
Johannes Stolte
Norman Zuther
Übersicht
Einleitung Syntax Beispiel J++ Umsetzung J++ -> Java Das lebende Beispiel Vererbung unter Monitoren und
Conditions
Was ist ein Monitor
Ein Monitor organisiert den Zugriff auf eine von mehreren Threads gemeinsam genutzte Ressource
Die Threads können nur über die Schnittstelle des Monitors auf die Ressource zugreifen
Vorausgesetzt die Konsistenz der Ressource bleibt erhalten
Sämtliche öffentlichen Methoden bilden zusammen einen kritischen Bereich
Was ist ein Monitor Wartet ein Thread auf das Eintreten einer
Bedingung, so muss er zum Warten den kritischen Abschnitt verlassen.
Wird ein Thread erweckt, so begibt er sich sofort wieder in den kritischen Abschnitt des Monitors, in dem er gewartet hat.
Er wird durch einen Thread erweckt, der die Bedingung erfüllt hat. Dieser muss danach den kritischen Abschnitt verlassen
Bedingungen
Eine Bedingung (Condition) ist ein boolscher Ausdruck
Bewahrt den Monitor vor fehlerhaften oder inkonsistenten Zuständen
Ist die Bedingung bereits erfüllt wartet der Thread nicht
Warten mehrere Thread auf eine Bedingung, wird zufällig einer dieser ausgewählt
Bedingungen
Wird fälschlicherweise die Erfüllung einer Bedingung signalisiert, wird eine Exception geworfen (Inkonsistenter Zustand)
Ein Monitor löst nicht die Probleme des Starvation oder des Deadlocks!
Syntax Beispiel J++
monitor Buffer // <-- (1)[extends monitor/class implements (monitor)interface]{ // <-- (2)
int size = 0;int max = 50;
Condition notFull(size<max); // <-- (3)Condition notEmpty(size>0);
Syntax Beispiel J++
1. Mit monitor wird eine neue Monitor-Klasse generiert.
2. Es kann von Monitoren oder Klassen geerbt und Monitor- oder normale Interfaces implementiert werden.
3. Dieser Monitor enthält Bedingungen(Condition), die einen boolschen Ausdruck enthalten.
Syntax Beispiel J++public Buffer() {
notFull.setExceptionText("Someone has not put something " +
"into the buffer, but he/she has signaled it."); // <-- (4)
notEmpty.setExceptionText("Someone has not get something " +
"from the buffer, but he/she has signaled it.");
}
4. Hier kann ein Text eingegeben werden, der in der Exception enthalten ist. Diese wird geworfen wenn eine Bedingung signalisiert wurde, obwohl sie nicht erfüllt ist.
Syntax Beispiel J++public void put(){
notFull.await(); // <-- (5)this.size++;notEmpty.signal(); // <-- (6)
}
public void get(){notEmpty.await();this.size--;notFull.signal();
}
Syntax Beispiel J++
5. Hier wird auf eine Bedingung gewartet.
6. Hier wird eine Bedingung signalisiert.
Umsetzung J++ -> Java
Umsetzung J++ -> Java Monitor: Dies ist die root- Klasse aller
Monitore. Semaphore: Dies kann eine Klasse aus
den Java-Bibliotheken sein, hier wird sie nochmal ausführlich gezeigt.
Condition: Eine Condition stellt die Bedingung da, auf die gewartet oder signalisiert werden kann.
ConditionNotFullFilledException: Wird eine eine nicht wahre Bedingung signalisiert, so wird diese Exception geworfen.
Das lebende Beispiel
Vererbung unter Monitoren und Conditions
class A extends [monitor] B compileError
class A implements [monitorinterface] B compileError
interface A extends [monitorinterface] B compileError
monitor A extends [class] B geht monitor A extends [monitor] B geht monitor A implements [interface] B
compileError monitor A implements [monitorinterface] B geht monitorinterface A extends [monitorinterface] B geht monitorinterface A extends [interface] B geht
Fragen