Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar

Preview:

Citation preview

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

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. 

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;

}}

Circular Linked List

• Container-Klasse• Doppeltverkettete Liste• Operationen

– Insert– Delete– Find– Locate– Get

Beipiel:Modell Entwurf

nextprev

data

nextprev

data

next

prev

data

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

 

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

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.

x 21 3

1x

2

3

Thread unsafeProblem: Paralleles Einfügen und Löschen

1 32

insert (x)delete (2)

2 3

1 2 3

1

x

x

INSERT();

1 x 3

DELETE();

Die Methoden sind synchronisiert

Thread safe Realisierung

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

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

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

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

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

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

Recommended