1 / 27

Beispielanwendung von Java Threads

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

rico
Télécharger la présentation

Beispielanwendung von Java Threads

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Proseminar Beispielanwendung von Java Threads Vorträger:Koussetou Batawi

  2. 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

  3. 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.

  4. Circular Linked List • Container-Klasse • Doppeltverkettete Liste • Operationen • Insert • Delete • Find • Locate • Get

  5. next next next prev prev prev data data data Beipiel:Modell Entwurf Class CircularListNode{ Object 0; CircularListNode next; CircularListNode prev; }

  6. 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

  7. 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.

  8. 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.

  9. 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.

  10. 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.

  11. Thread unsafeProblem: Paralleles Einfügen und Löschen 1 2 3 insert (x) delete (2) x 3 2 1 x 1 2 3

  12. Thread safe Realisierung x 2 1 3 INSERT(); x 2 1 3 DELETE(); 1 x 3 Die Methoden sind synchronisiert

  13. Thread safe Implementierung • Performance Aspekte • Nachteil: Zeitaufwand • Vorteil: korrektes Verhalten bei mehreren Threads • Containerklassen in Java 2, thread unsafe Realisierungen collection classes

  14. 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.

  15. Barrier • Synchronisation aller Threads • Barrier-Klasse • Mehrere Synchronisationspunkte werden durch eigene Barrier-Objekte realisiert.

  16. 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; } } }

  17. 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

  18. 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(); ... } }

  19. 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(); } }

  20. 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(); } }

  21. 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

  22. 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

  23. 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(); }  }

  24. Methode stopServer public synchronized void stopServer( ){ if(server != null) { shouldStop = true; runner.interrupt( );   runner = null;  try{ server closed( ); }catch (IOException ioe){ } server = null; } }

  25. 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{ } }.

  26. 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

More Related