270 likes | 361 Views
Proseminar. Beispielanwendung von Java Threads. Vorträger:Koussetou Batawi. Inhalt. Data Structures and containers Message Queue The circular linked List (Doppelt verkettete Kreisförmige Liste) Simple Synchronization Examples Beispielanwendung von der Klasse Barrier
E N D
Proseminar Beispielanwendung von Java Threads Vorträger:Koussetou Batawi
Inhalt • Data Structures and containers • Message Queue • The circular linked List (Doppelt verkettete Kreisförmige Liste) • Simple Synchronization Examples • Beispielanwendung von der Klasse Barrier • Beispielanwendung von der Klasse ProcessIt • A Network Server Class
Rolle der Message Queue • MsgQueue ist eine Technik des IPC (Interprocess Communication) benutzt in Unix Systemen • Realisierung von Nachrichtenaustausch zwischen Threads in Java • Basiert auf der Vector-Klasse von Java • Zwei Methoden werden benutzt: • Eine Methode send(), um data zu anderem System zu schicken. • - Eine Methode recv(), ist von einem System exekutiert damit eine data zu nehmen.
Circular Linked List • Container-Klasse • Doppeltverkettete Liste • Operationen • Insert • Delete • Find • Locate • Get
next next next prev prev prev data data data Beipiel:Modell Entwurf Class CircularListNode{ Object 0; CircularListNode next; CircularListNode prev; }
Methode insert(); • Public class CircularList{ • pivate CircularListNode current; • public synchronized void insert (Object o){ • CircularListNode tn = new CircularListNode(); • tn.o = 0; • if(current = = null){ • tn.next = tn.prev = tn; • current = tn; • }else{ • tn.next = current; • tn.prev = current.prev; • current.prev.next = tn; • current.prev = tn; • } • } • Rolle • -Einfügen von Daten in der Liste. • -Ein Arbeitzeiger der Klasse CircularListNode,der auf den Knotenpunkt zeigt hinter dem ein neues Element eingefügt wird
Methode delete • public synchronized void delete(Object o){ • CircularlistNode p = find(o); • CircularlistNode next = p.next; • CircularlistNode prev = p.prev; • if(p = = p.next){ • current = null; • return; • } • prev.next = next; • next.prev = prev; • if(current = = p) current = next; • Rolle • -Löschen eines Elements aus der Liste indem man das Element in Parameter eingibt. • -Suche des Element in der Liste, • -Löschen des Elements.
Methode find • Private CircularlistNode find(Object o){ • CircularlistNode p = current; • if(p = = null); • throw new IllegalArgumentException(); • do { • if(p.o = = o) return p; • p = p.next; • }While (p = = current); • throw new IllegalArgumentException(); • } • Rolle • -Suche nach bestimmten Element durch die Liste. • - Zurückgabe des Elements • -Fehler Meldung sonst.
Methode locate(); • public synchronized Object locate (Object o) { • CircularlistNode p = current; • do{ • if(p.o.equals(o)) return p.o; • p = p.next; • } • While (p! = current); • throw new IllegalArgumentException(); • } • Rolle • -suche nach einem bestimmten Datensatz in der Liste • -Übergabe des Datensatzes als Parameter an die Methode.
Methode getnext(); • Public Synchronized Object getNext() { • if (current = = null); • return null; • current = current.next; • returncurrent.o; • } • } • Rolle • -Ausgabe des Datensatzes des Knoten nach dem Arbeitspeicher. • -Incrementierung des Arbeitspeichers um eins. • -Ausgabe des Datensatzes von Arbeitspeicher.
Thread unsafeProblem: Paralleles Einfügen und Löschen 1 2 3 insert (x) delete (2) x 3 2 1 x 1 2 3
Thread safe Realisierung x 2 1 3 INSERT(); x 2 1 3 DELETE(); 1 x 3 Die Methoden sind synchronisiert
Thread safe Implementierung • Performance Aspekte • Nachteil: Zeitaufwand • Vorteil: korrektes Verhalten bei mehreren Threads • Containerklassen in Java 2, thread unsafe Realisierungen collection classes
Wait Notify Synchronization • Generell • Wait und notify können nur innerhalb einer synchronisierten Region ausgeführt werden. • Sie beziehen sich auf das entsprechend gesetzte Lock. • Methode wait( ) • Blockiert thread und gibt lock frei • Methode notify( ) • Weckt einen wartenden Thread auf. • Dieser wartet aber auf lock. • Methode notifyAll( ) • Weckt alle artenden Threads auf.
Barrier • Synchronisation aller Threads • Barrier-Klasse • Mehrere Synchronisationspunkte werden durch eigene Barrier-Objekte realisiert.
Barrier: WaitForRest class barrier { private int threads2wait4; ..... public Synchronized int waitForRest(){ int threadNum = --threads2wait4; if(threads2wait4 <= 0){ notifyAll(); return threadNum; } if (threads2Wait4>0){ wait(); return threadNum; } } }
Vergleich zwischen Barrier und join() Methoden Thread 1 Thread 1 Thread 2 Thread 2 Thread 3 Thread 3 Thread 4 Thread 4 Thread 1 Thread 1 Thread 5 Thread 2 Thread 6 Thread 3 Thread 7 Thread 4
Methode Join(); Class Thread1 implement Runnable{ Thread2 aufgabe2; Thread3 aufgabe3; Thread4 aufgabe4; .... public void runn( ){ aufgabe2 = new Thread2; aufgabe2.start( ); aufgabe3 = new Thread3; aufgabe3.start( ); aufgabe4 = new Thread4; aufgabe4.start( ); aufgabe1(); aufgabe2.join(); aufgabe3.join(); aufgabe4.join(); ... } }
class Thread1 implements Runnable{ ... Thread4 aufgabe4; Thread5 aufgabe5; Thread6 aufgabe6; Thread7 aufgabe7; Public void runn( ){ ... aufgabe4.join(); aufgabe5 = new Thread5; aufgabe5.start( ); aufgabe6 = new Thread6; aufgabe6.start( ); aufgabe7 = Thread7; aufgabe7 .start( ); aufgabe5.join(); aufgabe6.join(); aufgabe7.join(); } }
Barrier Beispiel public class processIt implement Runnable{ Barrier bp1=new(4); Barrier bp1b=new(4); Barrier bp2=new(4); Barrier bp2b=new(4); Barrier bpStart=new(4); Barrier bpEnd=new(4); public void runn(){ int I = bpStart.waitForRest(); doPhaseOne(is [i] ); if(bp1.waitForRest() == 0) doPhaseTwoSetup(); bp1b.waitForRest(); doPhaseTwo(is[i]); if(bp2.waitForRest() == 0) doPhaseThreeSetup(); bp2b.waitForRest(); doPhaseThree(is[i]); bpEnd.waitForRest(); } }
Vor- und Nachteile von Barrier • Nachteile:zeit aufwand bei Thread Implementierung mit Barrier Klasse. • Vorteile:In dieser java Bibliothek sind Methoden synchronisiert also verfügbar überall
Socket(server) Socket(data) Socket(data) Socket(data) Socket(data) Clt1 soc Clt2 soc Cltn soc A Network server class Verbindung zwischen Clients und Server
Class TCPserver Import java.net.* ; Import.io.* ; public class TCPServer implements cloneable,Runnable{ Thread runner = null; serverSocket server = null; socket data = null; boolean shouldStop = false; public synchronized void startServer (int port) throws IOException{ if(runner = = null){ server = new serverSocket(port); runner = new Thread(this); runner.start(); } }
Methode stopServer public synchronized void stopServer( ){ if(server != null) { shouldStop = true; runner.interrupt( ); runner = null; try{ server closed( ); }catch (IOException ioe){ } server = null; } }
Methode run public void run(){ if(server != null){ While(!shouldStop){ Try{ Socket datasocket = server.accept(); TCPServer newSocket = (TCPServer) close(); newsocket.server = null; newsocket.data = datasocket ; newsocket.runner = new Thread(newSocket); newsocket.runner.start(); }catch{Exception e} {} } }else{ run(data); } } public void run socket data{ } }.
Zusammenfassung • Data structures and Containers : • Mit MsgQueue ;eine Technik des IPC in Unix,damit erzeugenes objekt zwischen threads passt • Implementierung einer Doppelt Verkettete Kreisförmige Liste und das Speichern von zusammengehörenden Daten. • Simple Synchronization Examples • mit Anwendung von Barrier wo die wait(),notify()und notifyAll() Methoden sind benutzt und machen den Unterschied zwischenSafe und Unsafe Threads. • Barrier ist von ProcessIt Class benutzt • Da wird auch einen Vergleich zwischen Barrier Klasse und join() Methode gemacht. • Network Server Class • Diese Klasse zeigt die Beziehung zwischen Clients und Server