1 VE 11 Kruskal-Realisierung Listen. 2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten,

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
Vertieferseminar Geoinformation WS 02/03
Kritische Betrachtung
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Real - Time Java Seminar Asynchrone Ereignisse und Asynchroner Kontrolltransfer in Real - Time Java Sönke Eilers.
der Universität Oldenburg
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Ein Beispiel in Java.
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Klassen 02 - Klassen.
Java Threads Sebastian Werler
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Thread Synchronisation in JAVA
Unterprogramme in JAVA
Betriebssysteme Übung 2. Tutorium. Task 1 – Locks (1) Wozu Locks? Dienen dazu, exklusiven Zugriff auf eine Ressource sicherzustellen Lock = binäre Semaphore.
EPROG Tutorium #5 Philipp Effenberger
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Parallelisierung für Multiprozessor-Maschinen
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
2. Kommunikation und Synchronisation von Prozessen 2
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
2 Nebenläufige Prozesse. 2.1 Programmstruktur und Prozesse private Prozess = Anweisungen + Daten gemeinsame Aber:Wie verhält sich das Konstrukt „Prozess“
A Workshop About this chapter General description Units Time Schedule
Java-Kurs Übung Besprechung der Hausaufgabe
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
93 Das Monitorkonzept (nach Hoare/Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger.
Abstrakte Klassen und das Interface-Konzept
Objektorientierte Programmierung (OOP)
Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Thread-Konzept in objektorientierten.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
Praktische Informatik 1
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Implementieren von Klassen
 Präsentation transkript:

1 VE 11 Kruskal-Realisierung Listen

2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten, jeder Knoten kennt seine Nachbarn. Der Spannbaum könnte dargestellt werden als Menge von Kanten. Die Partition könnte als Menge von Knotenmengen dargestellt werden. Gerade die Darstellung von Knotenmengen wird eine zentrale Rolle spielen.

3 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Deshalb: Welche Operationen auf Mengen werden gebraucht: Initialisieren einer Menge als leere Menge Prüfen, ob ein Element in einer Menge enthalten ist Einfügen eines Elements in eine Menge Entfernen eines Elements aus einer Menge Iteration über die Elemente einer Menge Finden eines Elements einer Partition (also einer Menge), das selbst ein Element der Grundmenge enthält

4 class ObjElement

5 class ObjectListe

6 class Kante

7 class KantenListe

8 VE 11 Threads

9 Bislang wurde ein Programmteil in unseren Beispielen nur einmal ausgeführt, nicht mehrmals parallel. Parallele Ausführung ist aber sinnvoll. Z.B. immer dann, wenn Ressourcen (auf Anwendungsebene!) geteilt werden sollen, z.B.: Objekte und Attribute Zugriff auf Datenbanken Paralleler Zugriff auf geteilte Ressourcen funktioniert über so genannte Threads („Fäden“). Threads sind Teile eines Programms, die innerhalb des Programms parallel ausgeführt werden.

10 Threads Der Zusammenhang zwischen den Threads ergibt sich dabei in der Regel gerade durch das Teilen der Ressourcen. Threads können auf einer Maschine mit nur einem Prozessor ablaufen und sich dabei aufführen, als ob sie eigene Prozesse wären. Ein Thread wird deshlab auch Ausführungskontext oder leichtgewichtiger Prozess genannt. Ihr Unterschied zu wirklich eigenständigen Prozessen ist, dass sie aus einem Hauptprogramm erzeugt werden. Ein Thread modelliert Objekte, die innerhalb eines umgebenden Prozesses einen eigenen Kontrollfluss haben.

11 Multithreading Multithreading bedeutet: Programmpfad wird in unterschiedliche Richtungen verzweigt, diese laufen parallel. Multithreading bedeutet nun, dass es möglich ist, mehrere Thread parallel laufen zu lassen (bei nur einem Prozessor ist dies natürlich keine echte Parallelität).

12 Threads Bisher: Single-Threaded Execution Neu: Multi-Threading Methode aMethode b Methode c t Methode aMethode b t Methode c

13 Multithreading Probleme: Konkurrierende Threads benutzen gleiche Ressourcen und Daten => Bei Zugriff auf gemeinsam genutzte Ressourcen muss Schutz greifen (nur ein Thread hat den Monitor, der die Ressource kontrolliert) Threads, die mehrere Ressourcen gleichzeitig benötigen, können sich gegenseitig blockieren (Deadlock), indem sie jeweils eine Ressource festhalten und auf die anderen warten. Nicht jede Virtual Machine verteilt CPU-Zeit automatisch gerecht (Es gibt Timeslicing-fähige und -unfähige Systeme) => Laufende Threads sollten auch anderen eine Chance geben Mögliche Zustände oft schwer verständlich, da Parallelität nicht gerade intuitiv verständlich

14 Threads In Java: Threads sind Objekte, die Thread erweitern und damit dann auch das Interface Runnable implementieren public class Thread implements Runnable {... public void run(); public void start();... } Threads müssen die Methode run() überschreiben (dort passiert die Arbeit!) Wird von einem Thread-Objekt die (eingebaute) start() -Methode aufgerufen, startet eine Ausführung von run(). Durch mehrfaches Aufrufen von start() können mehrere Ausführungen von run() parallel ausgeführt werden.

15 Beispiel class AddThread extends Thread{ public void run(){ for(int i=0;i<10;i++){ MyThreadExample.count++; System.out.print("Add "); System.out.println (MyThreadExample.count); }

16 Beispiel class SubtractThread extends Thread{ public void run(){ for(int i=0;i<10;i++){ MyThreadExample.count--; System.out.print("Subtract "); System.out.println( MyThreadExample.count); }

17 Beispiel class MyThreadExample{ public static int count=0; public static void main(String args[]){ AddThread a = new AddThread(); SubtractThread b = new subtractThread(); a.start(); b.start(); }

18 Beispiel Mögliches Ergebnis Add 1 Add 2 Add 3 Add 4 Add 5 Subtract Add 5 Add Subtract 5 Subtract

19 Beispiel class AddThread extends Thread{ public void run(){ for(int i=0;i<10;i++){ System.out.print("Add start "); MyThreadExample.count++; System.out.println("Add end:" + MyThreadExample.count); }

20 Beispiel class SubtractThread extends Thread{ public void run(){ for(int i=0;i<10;i++){ System.out.print("Sub start"); MyThreadExample.count--; System.out.println("Sub end:" + MyThreadExample.count); }

21 Beispiel class MyThreadExample{ public static int count=0; public static void main(String args[]){ AddThread a = new AddThread(); SubtractThread b = new subtractThread(); a.start(); b.start(); }

22 Beispiel Mögliches Ergebnis 1: Add start Sub start Sub end:0 Add end:0 Add start Sub start Add end:1 Add start Sub end:0 Add end:1 Sub start Add start Sub end:1 Add end:1 Sub start Add start Sub end:0 Sub start Add end:0 Sub end:0 Sub start Sub end:-1 Add start Sub start Add end:-1 Add start Add end:0 Sub end:0 Add start Add end:1 Add start Add end:2 Sub start Add start Add end:2 Sub end:2 Sub start Sub end:1 Sub start Sub end:0 Mögliches Ergebnis 2: Add start Add end:1 Add start Add end:2 Add start Add end:3 Add start Add end:4 Add start Add end:5 Add start Add end:6 Add start Add end:7 Add start Add end:8 Add start Sub start Sub end:7 Sub start Sub end:6 Sub start Sub end:5 Sub start Sub end:4 Sub start Sub end:3 Sub start Sub end:2 Sub start Sub end:1 Sub start Sub end:0 Sub start Sub end:-1 Sub start Sub end:-2 Add end:-1 Add start Add end:0

23 Thread / Runnable Ein Thread wird immer in einer run-Methode gestartet public void run() Diese Methode muss von einer Klasse implementiert werden, dessen Objekt sich mit einem eigenen Thread ablösen möchte Bei Start des Threads wird die run -Methode vom System automatisch aufgerufen (nicht selbst aufrufen!) Ein thread-fähige Klasse kann durch zwei Möglichkeiten definiert werden: Erben von der Klasse Thread, hier muss die run() -Methode der Klasse Thread überschrieben werden Implementieren des Interfaces Runnable, hier muss die run() - Methode des Interfaces implementiert werden

24 Using the Runnable Interface class AddThread extends SomeClass implements Runnable{ public void run(){ for(int i=0;i<10;i++) SyncThread.incCount(); }... // Where the thread shall be started // a new Thread Object is created AddThread a = new AddThread(); Thread this_is_the_Thread = new Thread(a); this_is_the_Thread.start();...

25 Warum zwei Möglichkeiten? Die einfachere Möglichkeit ist es, von Thread abzuleiten Aber: Java kennt keine Mehrfachvererbung von Klassen, jedoch Mehrfachvererbung von Interfaces Es ist wünschenswert, auch Unterklassen multithreading-fähig zu machen => Hier bleibt nur die Möglichkeit, Runnable zu implementieren

26 Methoden von Thread Konstruktoren: public Thread() Muss von abgeleiteter Klasse durch super() aufgerufen werden public Thread(String name) Muss von abgeleiteter Klasse durch super(name) aufgerufen werden Dem Thread wird hier ein Name gegeben public Thread(Runnable target) Muss direkt aufgerufen werden, um Threads über das Runnable -Interface zu definieren Methoden: public synchronized void start() Startet den Thread. Die virtuelle Maschine startet die run() - Methode in eigenem Programmpfad synchronized ist neues Schlüsselwort, später mehr

27 Methoden von Thread Methoden: public static Thread currentThread() Klassenmethode, um den aktuell laufenden Thread zu ermitteln public static void yield() Aufforderung, eventuell andere wartende Threads zum Zuge kommen zu lassen public static void sleep(long millis) throws InterruptedException Thread wartet angegebene Zeit. Andere Threads kommen zum Zuge, sofern sie nicht durch belegte Resourcen blockiert sind public final void setPriority(int newPriority) Legt die Priorität des Threads fest. Threads höherer Priorität laufen bevorzugt public final String getName() Gibt den Namen des Threads zurück

28 Deaktivierung eines Threads Methoden: sleep siehe oben suspend Unterbricht die Arbeit eines Prozesses wait veranlasst, dass ein Prozess eine vorgegebene Zeit wartet von Object ererbt

29 Aktivierung eines passiven Threads Methoden: resume Gegenstück zu suspend notify, notifyAll reaktiviert wartende Prozesse (Gegenstück zu wait) von Object ererbt

30 Vernichten eines Prozesses Methoden: stop anomale und sofortige Beendigung eines aktiven oder gerade erzeugten Prozesses (mit Aufräumarbeiten) destroy wie stop aber ohne Aufräumarbeiten

31 Ein neuer Thread (Zustand new), der noch nicht ausgeführt wurde, erfordert vor der ersten Ausführung erst mal die Zuweisung von Ressourcen (Speicher). Dann wird er mittels der Methode start() in den Zustand runnable überführt. Runnable bedeutet, dass der Prozess durchgeführt werden kann (also aktiv werden kann). Allerdings kann nur ein Prozess zu jeder Zeit aktiv sein. Die wartenden, schlafenden, unterbrochenen Prozesse sind im Zustand blocked. Wenn der aktive Prozess in den Zustand blocked übergeht, dann wird ein runnable Prozess aktiviert. Zustandsübergänge von Threads

32 Die JVM wählt aus der Menge der runnable Prozesse den durchzuführenden aus. Hier gibt es Unterschiede zwischen den JVMs auf verschiedenen Plattformen !! Ein Prozess verlässt den Zustand blocked, wenn die Schlafperiode zu Ende geht, er notifiziert wird (notify), die I/O-Operation, auf die er wartet, terminiert, wenn er per resume fortgesetzt wird. Zustandsübergänge von Threads

33 Threads gehen in den Zustand dead über, wenn seine run()-Methode beendet wird, seine stop()- oder destroy-Methode aufgerufen wird. Ein dead Thread kann nicht reaktiviert werden. Zustandsübergänge von Threads

34 Prioritäten Jeder Thread hat eine Priorität. Die JVM bevorzugt die Threads mit hohen Prioritäten, wenn ein Thread von runnable in aktiv überführt werden soll. Ein Thread läuft solange bis: er die yield()-Methode aufruft, er nicht mehr runnable ist (z.B. weil er auf einen initiierten I/O warten muss), ein Thread mit höherer Priorität runnable wird.

35 Zustandsübergänge von Threads