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

Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Embed Size (px)

Citation preview

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

Beispielanwendung von Java Threads

Vorträger:Koussetou Batawi

Proseminar

Page 2: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 3: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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. 

Page 4: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Message Queue

import java.util.* ;public class MsgQueue{

Vector queue = new Vector ();

public synchronized void send (Object obj){queue.addElement (obj) ;

}public Synchronized Object recv() {

if (queue.size() == 0)return null;Object obj = queue.firstElement();

queue.removeElementAt (0);return obj;

}}

Page 5: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Circular Linked List

• Container-Klasse• Doppeltverkettete Liste• Operationen

– Insert– Delete– Find– Locate– Get

Page 6: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Beipiel:Modell Entwurf

nextprev

data

nextprev

data

next

prev

data

Class CircularListNode{

Object 0;

CircularListNode next;

CircularListNode prev;

}

Page 7: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 8: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

 

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 delete

Page 9: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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.  

Page 10: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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.  

Page 11: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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.

Page 12: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

x 21 3

1x

2

3

Thread unsafeProblem: Paralleles Einfügen und Löschen

1 32

insert (x)delete (2)

Page 13: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

2 3

1 2 3

1

x

x

INSERT();

1 x 3

DELETE();

Die Methoden sind synchronisiert

Thread safe Realisierung

Page 14: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Thread safe Implementierung

• Performance Aspekte

• Nachteil: Zeitaufwand

• Vorteil: korrektes Verhalten bei mehreren Threads

• Containerklassen in Java 2, thread unsafe Realisierungen collection classes

Page 15: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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.

Page 16: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Barrier

• Synchronisation aller Threads• Barrier-Klasse• Mehrere Synchronisationspunkte werden durch

eigene Barrier-Objekte realisiert.

Page 17: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 18: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Vergleich zwischen Barrier und join() Methoden

Thread 1

Thread 2

Thread 3

Thread 4

Thread 1

Thread 2

Thread 3Thread 4

Thread 1

Thread 5

Thread 6Thread 7

Thread 1

Thread 2

Thread 3

Thread 4

Page 19: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 20: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 21: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 22: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 23: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

A Network server class

Clt1 soc

Clt2 soc

Cltn soc

Socket(server)

Socket(data)

Socket(data)

Socket(data)Socket(data)

Verbindung zwischen Clients und Server

Page 24: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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

Page 25: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Methode stopServer

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

Page 26: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Methode runpublic 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{ } }.

Page 27: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

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