Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Beispielanwendung von Java Threads

Ähnliche Präsentationen


Präsentation zum Thema: "Beispielanwendung von Java Threads"—  Präsentation transkript:

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

2 Inhalt Data Structures and containers Message Queue
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 Realisierung von Nachrichtenaustausch zwischen Threads in Java
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

5 Circular Linked List Container-Klasse Doppeltverkettete Liste
Operationen Insert Delete Find Locate Get

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

7 Methode insert(); -Einfügen von Daten in der Liste.
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

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

9 Methode find Rolle -Suche nach bestimmten Element durch die Liste.
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.

10 -suche nach einem bestimmten Datensatz in der Liste
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.

11 Methode getnext(); Rolle
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.

12 Thread unsafe Problem: Paralleles Einfügen und Löschen
1 2 3 insert (x) delete (2) 3 x 1 2 x 1 2 3

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

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

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

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

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

18 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

19 Methode Join(); Class Thread1 implement Runnable{ Thread2 aufgabe2;
.... 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(); ... }

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

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

22 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

23 Verbindung zwischen Clients und Server
A Network server class Clt1 soc Clt2 soc Cltn soc Socket(server) Socket(data) Verbindung zwischen Clients und Server

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

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

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

27 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

28


Herunterladen ppt "Beispielanwendung von Java Threads"

Ähnliche Präsentationen


Google-Anzeigen