Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft.

Ähnliche Präsentationen


Präsentation zum Thema: "1.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft."—  Präsentation transkript:

1 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft ist eine Koordination von Threads notwendig Monitore (C.A.R. Hoare) können zur Synchronisation von Threads verwendet werden class SpeechSynthesizer{ synchronized void say(String words){ // Speak } Thread

2 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Monitore in Java Ein Monitor ist die Kapselung eines kritischen Bereiches mit Hilfe einer automatisch verwalteten Sperre jedes von der JVM angelegte Objekt verfügt über eine Sperre Schlüsselwort synchronized markiert Methoden in einer Klasse für die ein Thread vor Ausführung die Sperre verlangen muß class SpeechSynthesizer{ synchronized void say(String words){ // Speak } Sperre wird immer von einem Objekt angefordert nicht statische Methode => Objekt mit dem die Methode aufgerufen wird statische Methode => Class-Objekt der entsprechenden Klasse

3 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized int sumRow() { return cellA1 + cellA2 + cellA3; } synchronized void setRow(int a1, int a2, int a3){ cellA1 = a1; cellA2 = a2; cellA3 = a3; } Aufruf von sumRow() oder setRow() über ein Objekt a verlangt jeweils die Sperre von Objekt a

4 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel class SpreadSheet { static int cellA1, cellA2, cellA3; synchronized static int sumRow() { return cellA1 + cellA2 + cellA3; } synchronized static void setRow(int a1, int a2, int a3){ cellA1 = a1; cellA2 = a2; cellA3 = a3; } Aufruf von sumRow() oder setRow() verlangt jeweils die Sperre von dem Class-Objekt der Klasse SpreadSheet

5 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Synchronisation von Blöcken Schlüsselwort synchronized kann für Blöcke verwendet werden Angabe eines Objektes, dessen Sperre verwendet werden soll synchronized (myObject){ // Anweisungsblock der synchronisiert werden muß... } synchronized void myMethod(){ void myMethod(){... synchronized (this){ }... } Synchronisation von Blöcken oder Methoden verschiedener Klassen

6 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Freigabe von Sperren wait() und notify() erweitern Synchronisationsmechanismen Methodenaufruf wait() bewirkt: Thread beendet Bearbeitung eines synchronisierten Blocks und geht in den “schlafenden” Zustand Sperre für den synchronisierten Block wird freigegeben Methodenaufruf notify() bewirkt: mit wait() in den schlafenden Zustand versetzter Thread, kann wieder die Sperre des entsprechenden Objektes anfordern notify() aufrufender Thread beendet normal die Ausführung auf dem synchronisierten Block “aufgeweckter” Thread kann (muß aber nicht) als nächstes die Sperre erhalten und führt dann die Bearbeitung fort überladene Version der wait-Methode und notifyAll()-Methode

7 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel class MyThing { synchronized void waiterMethod() { // Ausführung irgendwelche Sachen wait(); // Weiterbearbeitung der Methode } synchronized void notifierMethod() { // Ausführung irgendwelcher Sachen notify(); // Weitere Arbeiten werden ausgeführt werden } synchronized void relatedMethod(){ // Ausführung irgendwelcher Arbeiten }

8 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel: Producer und Consumer Threads class Producer extends Threads{ static final int MAXQUEUE = 5; private Vector messages = new Vector(); public void run(){ try{ while(true){ putMessage(); sleep( 1000); } catch (InterruptedException e){ } }...

9 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel: Producer und Consumer Threads... private sychronized void putMessage() throws InterruptedException{ while( message.size == MAXQUEUE) wait(); message.addElement( new java.util.Date().toString()); notify(); } public synchronized String getMessage() throws InterruptedException { notify(); while( messages.size() == 0 )wait(); String.message = (String) messages.firstElement(); messages.removeElement( message ); return message; }

10 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel: Producer und Consumer Threads class Consumer extends Threads { Producer producer; Consumer( Producer p){ producer = p; } public void run() { try { while( true ){ String message = producer.getMessage(); System.out.println(´´Got message: ´´ + message); sleep( 2000 ); } } catch ( InterruptedException e ) { } }

11 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Methoden zur Rechnerkernvergabe Prioritätengesteuerte Rechnerkernvergabe Rechnerkernabgabe sleep(), wait(), yields() und stop() Priorität hoch tief

12 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Methoden zur Rechnerkernvergabe Prioritätengesteuertes Zeitscheibenverfahren Rechnerkernabgabe sleep(), wait(), yields() und stop() Priorität hoch tief

13 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Applets in der Programmiersprache Java

14 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Applets in Java Applikationen versus Applets Java-Applikationen sind in sich geschlossene Java Programme, die nur mit dem Java-Interpreter ausgeführt werden können Java-Applets werden mit einem speziellem HTML-Tag in eine Web- Seite eingebettet, von einem javakundigen WWW-Browser (z.B. Netscape, Internet-Explorer) von einem Web-Server heruntergeladen und auf dem lokalen System ausgeführt Applets unterliegen strengen Sicherheitsvorkehrungen Applets können normalerweise das Dateisystem des Benutzers nicht lesen und nicht beschreiben. Applets können nur mit dem Server kommunizieren auf dem sie gespeichert sind Applets können auf Client-Servern keinerlei Programme ausführen

15 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Einbinden eines Applets in ein HTML-Dokument Einbinden eines Applets in ein HTML-Dokument erfolgt mit einem APPLET-Tag There would be an applet here if your browser supported Java.

16 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Attribute des APPLET-Tags CODE ist erforderlich, gibt die Datei an in der die Hauptklasse des Applets abgelegt ist CODEBASE - Pfadname auf dem sich die Klasse befindet WIDTH und HEIGHT sind erforderlich, um die Grenzen der Applet-Box in Pixeln zu bezeichnen ALIGN - definiert die Position des Applets auf der WWW-Seite left, right, top, texttop, middle, baseline, bottom, HSPACE und VSPACE - Abstand des Applets auf der WWW- Seite in Pixeln PARAM-Tag - Parameterübergabe an das Applet ist der verwendete Browser nicht Java-fähig erscheint anstatt des Applets der eingebundene Text

17 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel einer HTML-Dokumentes HelloWeb Here is a HelloWeb-Program, just in case your are unhappy! There would be an applet here if your browser supported Java.

18 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Erstellen von Applets Ein Applet ist eine Unterklasse der Klasse java.applet.Applet public class myApplet extends Applet {... } die Datei muß denselben Namen wie das Applet haben abgeleitete Klasse muß als public definiert werden wird eine Applet über das WWW geladen, bildet Java ein Objekt dieser Klasse keine main-Methode hat vordefinerte Methoden die überschrieben werden können void init(), void start(), void stop(), void destroy(), void paint(Graphics g) String getParameter(String), void resize(int width, int height)

19 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel eines Applets import java.applet.Applet; import java.awt.Graphics; public class Hello extends Applet { public void paint(Graphics g){ String name = getParameter(´´name´´); if ( name == null) name = ´´NN´´; String s = ´´Hello ´´ + name + ´´!´´; g.drawString(s, 10, 20); }

20 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Lebenszyklus eines Applets start() unbekanntinitialisiert laufend init() gestoppt start() zerstört destroy() Laden des Applets Zurückkehren zu einer Seite Deiconifizierung Reload in Netscape stop() Laden einer neuen Seite Iconifizierung Browser/Appletviewer Zustand Verwerfen des Applets im Browser

21 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Aktivitäten eines Applets Initialisierung: Applet wird zum ersten Mal geladen Einlesen von Parametern Erzeugen wichtiger Objekte Einbinden von Medien public void init() {... } Zerstören: endgültiges Beenden des Applets Beenden noch laufender Threads oder Freigabe anderer Ressourcen public void destroy() {... }

22 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Aktivitäten eines Applets Starten: nach Initialisierung, Rückkehr auf die zugehörige WWW-Seite oder Neuladen Starten von Threads, Aussenden von Meldungen an Hilfsobjekte public void start() {... } Stoppen: beim Verlassen der WWW-Seite oder vor Neuladen Beenden laufender Threads oder Freigabe anderer Ressourcen public void stop() {... } Zeichnen: Zeichnen am Bildschirm public void paint(Graphics) {... }

23 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel public class MyApplet extends Applet{ String s; int inits = 0; int starts = 0; int stops = 0; public void init() { inits++ } public void start() { starts++ } public void stop() { stops++} public void paint(Graphics g){ s = ´´inits: ´´ + inits + ´´, starts: ´´ + starts + ´´, stops: ´´ + stops; g,drawString(s, 10, 10); }

24 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Applets als Threads class MyApplet extends Applet { Thread t; public void start() { if( t ==null) { t = new Thread(this); t.start(); } } public run() { // Ergibt false, nachdem stop() aufgerufen wurde while( t == Thread.currentThread()){... } } public void stop() { t = null; }


Herunterladen ppt "1.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft."

Ähnliche Präsentationen


Google-Anzeigen