16
Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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

Embed Size (px)

Citation preview

Page 1: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

Monitore in Java++

Aufgabe 2

von

Markus Schlebusch

Christoph Reinboth

Sebastian Zok

Johannes Stolte

Norman Zuther

Page 2: 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

Page 3: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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

Page 4: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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

Page 5: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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

Page 6: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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!

Page 7: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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);

Page 8: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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.

Page 9: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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.

Page 10: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

Syntax Beispiel J++public void put(){

notFull.await(); // <-- (5)this.size++;notEmpty.signal(); // <-- (6)

}

public void get(){notEmpty.await();this.size--;notFull.signal();

}

Page 11: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

Syntax Beispiel J++

5. Hier wird auf eine Bedingung gewartet.

6. Hier wird eine Bedingung signalisiert.

Page 12: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

Umsetzung J++ -> Java

Page 13: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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.

Page 14: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

Das lebende Beispiel

Page 15: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

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

Page 16: Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther

Fragen