Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte...

Preview:

Citation preview

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

Recommended